Kann es eine Variable geben, die eine Zufallszahl aus drei vorab festgelegten Zahlen auswählt?
Probe:
var= 10 or 100 or 1000
Kann es eine Variable geben, die eine Zufallszahl aus drei vorab festgelegten Zahlen auswählt?
Probe:
var= 10 or 100 or 1000
Antworten:
Verwenden Sie ein Array, um die Werte zu speichern, und wählen Sie sie mithilfe der integrierten Variablen aus $RANDOM
. Beispielsweise,
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
Die Qualität der Zufälligkeit wird nicht die bestmögliche sein (dafür Bytes lesen /dev/urandom
), aber sie sollte für ein Skript mehr als gut genug sein.
Anmerkung 1: Da die Menschen in den Kommentaren beobachtet haben, statt die Array - Elemente einzeln eine Dose Initialisierung natürlich ein Array Litteral benutzen x=(10 100 1000)
.
Anmerkung 2: Anstatt die Anzahl der Elemente im Array fest zu codieren, kann ein Radomelement mit extrahiert werden ${x[$RANDOM%${#x[@]}]}
.
x=(10 100 1000)
ein Array aus einem Literal in bash erstellt. Dies wäre lesbarer und idiomatischer
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.
sowas?
Wenn Sie bash (oder zsh oder ksh93 ) verwenden, können Sie einfach Folgendes tun:
echo "$((10**($RANDOM%3+1)))"
oder
var=$((10**($RANDOM%3+1)))
es var zuweisen
Sie können auch das GNU- shuf
Dienstprogramm coreutils verwenden :
a=$(shuf -n1 -e 10 100 1000)
Die Verwendung RANDOM
der anderen Antworten ist jedoch mit ziemlicher Sicherheit schneller.
Hier ist ein leicht kryptischer Weg:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Dies weist den Zufallswert nach $var
Bedarf zu. Die printf
Formatzeichenfolge lautet 1%0Nd
- dies führt 0
dazu, dass sie mit N
führenden Nullen gedruckt wird , wobei N
das Intervall eine zufällige Ganzzahl ist [1,3]
.