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- shufDienstprogramm coreutils verwenden :
a=$(shuf -n1 -e 10 100 1000)
Die Verwendung RANDOMder 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 $varBedarf zu. Die printfFormatzeichenfolge lautet 1%0Nd- dies führt 0dazu, dass sie mit Nführenden Nullen gedruckt wird , wobei Ndas Intervall eine zufällige Ganzzahl ist [1,3].