Variabile scelta casualmente tra tre numeri (10, 100 e 1000)


19

È possibile avere una variabile che seleziona un numero casuale da tre numeri prestabiliti?

Campione:

var= 10 or 100 or 1000

1
Non programma in UNIX, quindi non riesco a scrivere il codice, ma ecco un altro approccio: val = left ("1000", length = Random 2 through 4). Per avere tre valori non correlati, il codice sarebbe simile.
Sensii Miller,

Risposte:


31

Utilizzare un array per contenere i valori e scegliere tra loro utilizzando la variabile incorporata $RANDOM. Per esempio,

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 qualità della casualità non sarà la migliore possibile (leggi i byte /dev/urandomper quello), ma dovrebbe essere più che sufficiente per uno script.

Nota 1: Come persone hanno osservato nei commenti, invece di inizializzare gli elementi dell'array individualmente uno può naturalmente utilizzare un letterale array: x=(10 100 1000).

Nota 2: Invece di codificare il numero di elementi nell'array, è possibile estrarre un elemento radom ${x[$RANDOM%${#x[@]}]}.


5
+1 Mentre la risposta di zeppelin è intelligente in questo caso particolare, l'approccio array è molto più generale.
Kamil Maciorowski il

4
Sembra x=(10 100 1000)creare un array da un letterale in bash, questo sarebbe più leggibile e più idiomatico
cat

1
@cat: l'opinione sulla leggibilità può variare. Mi piace mettere singoli articoli su righe separate, di solito con commenti finali che spiegano il valore.
AlexP

@AlexP Oh, suppongo che non commenterei se pensassi che fosse apposta. abbastanza giusto però
cat

1
@AlexP 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.qualcosa del genere?
Nick T

30

Se stai usando bash (o zsh o ksh93 ) puoi semplicemente fare:

echo "$((10**($RANDOM%3+1)))"

o

var=$((10**($RANDOM%3+1)))

per assegnarlo a var


:). Facile quando lo vedi, ma io no. Grazie!!
Espen Larsen,


8
case $(( RANDOM % 3 )) in
    0)
        var=10
        ;;
    1)
        var=100
        ;;
    2)
        var=1000
        ;;
esac

5

Ecco un modo leggermente enigmatico:

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

Questo assegnerà il valore casuale a $varcome richiesto. La printfstringa di formato è 1%0Nd: ciò causa la 0stampa con Nzeri iniziali, dove Nsarà un numero intero casuale nell'intervallo [1,3].

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.