.png)
¿Es posible tener una variable que seleccione un número aleatorio entre tres números predeterminados?
Muestra:
var= 10 or 100 or 1000
Respuesta1
Utilice una matriz para contener los valores y elija entre ellos utilizando 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 la gente ha observado en los comentarios, en lugar de inicializar los elementos de la matriz individualmente, por supuesto, se puede usar un literal de matriz: x=(10 100 1000)
.
Nota 2:En lugar de codificar el número de elementos de la matriz, se puede extraer un elemento radom mediante ${x[$RANDOM%${#x[@]}]}
.
Respuesta2
Si estas usandointento(ozshoksh93) puedes simplemente hacer:
echo "$((10**($RANDOM%3+1)))"
o
var=$((10**($RANDOM%3+1)))
para asignarlo avar
Respuesta3
También puedes usar las coreutils de GNU.shuf
utilidad:
a=$(shuf -n1 -e 10 100 1000)
Sin embargo , usar RANDOM
según las otras respuestas es casi seguro que es más rápido.
Respuesta4
Aquí hay una forma un poco críptica:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Esto asignará el valor aleatorio según $var
sea necesario. 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]
.