¿Es posible tener una variable que elija un número aleatorio de tres números predeterminados?
Muestra:
var= 10 or 100 or 1000
¿Es posible tener una variable que elija un número aleatorio de tres números predeterminados?
Muestra:
var= 10 or 100 or 1000
Respuestas:
Use una matriz para contener los valores y elija entre ellos usando la variable incorporada $RANDOM
. Por ejemplo,
x[0]=10 # One decade
x[1]=100 # One century
x[2]=1000 # One millennium
for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10
La calidad de la aleatoriedad no será la mejor posible (lea los bytes /dev/urandom
para eso), pero debería ser más que suficiente para un script.
Nota 1: Como ya se ha observado en los comentarios, en lugar de inicializar los elementos de la matriz de forma individual una lata de utilizar un curso Litteral matriz: x=(10 100 1000)
.
Nota 2: en lugar de codificar el número de elementos en la matriz, se puede extraer un elemento Radom ${x[$RANDOM%${#x[@]}]}
.
x=(10 100 1000)
crea una matriz de un literal en bash, esto sería más legible y más idiomático
x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.
algo así?
Si está utilizando bash (o zsh o ksh93 ) puede hacer lo siguiente:
echo "$((10**($RANDOM%3+1)))"
o
var=$((10**($RANDOM%3+1)))
para asignarlo a var
También puede usar la shuf
utilidad GNU coreutils :
a=$(shuf -n1 -e 10 100 1000)
Sin RANDOM
embargo, usar según las otras respuestas es casi seguro.
Aquí hay una forma ligeramente críptica:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Esto asignará el valor aleatorio a $var
lo requerido. La printf
cadena de formato es 1%0Nd
: esto hace 0
que se imprima con N
ceros a la izquierda, donde N
habrá un número entero aleatorio en el intervalo [1,3]
.