¿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/urandompara 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 shufutilidad GNU coreutils :
a=$(shuf -n1 -e 10 100 1000)
Sin RANDOMembargo, 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 $varlo requerido. La printfcadena de formato es 1%0Nd: esto hace 0que se imprima con Nceros a la izquierda, donde Nhabrá un número entero aleatorio en el intervalo [1,3].