(standard_in) 1: syntax-Fehler in der bash-Skript
Ich versuche zu generieren, die einige quasi-Zufallszahlen zur Einspeisung in eine monte-carlo-simulation. Ich bin mit der bash. Ich scheine zu haben, trifft einen syntax-Fehler, die ich habe, eingeengt zu sein in diesem Stück code.
randno4=($RANDOM % 100001)
upper_limit4=$(echo "scale=10; 1*75.3689"|bc)
lower_limit4=$(echo "scale=10; 1*75.1689"|bc)
range4=$(echo "scale=10; $upper_limit4-$lower_limit4"|bc)
t_twall=`echo "scale=10; ${lower_limit4}+${range4}*${randno3}/100001" |bc`
echo "$t_twall"
Weiß jemand, warum ich die unterhalb der Ausgabe-und nicht ein Wert zwischen 75.3689 und 75.1689 als das, was würde ich erwarten?
(standard_in) 1: syntax error
randno4=($RANDOM % 100001)
ist nicht arithmetische Auswertung. Das wird einerandno4='([0]="25649" [1]="%" [2]="100001")'
array. Vielleicht meintest durandno4='$(($RANDOM % 100001))'
?- Ich habe mehrere Zeilen alias in der ersten Zeile neben dem Namen der Variablen. Sie scheinen in Ordnung zu sein.
- Nutzen Sie auch
$randno3
imt_twall
Zuordnung Zeile ist nicht definiert. - Die erste Zeile ist in Ordnung. Es einfach nicht tun, was Sie denken, es tut. Führen Sie diese Zeile und führen Sie dann
declare -p randno4
. Dann versuchenecho "$randno4"
vs.echo "${randno4[1]}"
. - Ich glaube, der eigentliche Fehler ist hier von
bc
wegen derrandno3
Tippfehler. - OK, so ist die nullte Stelle im array eine Zufallszahl und wenn ja, ist es zwischen 0 und 100001? In meinem Ausgänge habe ich nicht bemerkt Probleme aber ich bin neu in diesem, und nur, es zu schreiben. Ich bekomme nicht die gleiche Anzahl, wie Sie für den nullten element ich bekomme [0]="22737"
- Das erste element ist der ausbau von
$RANDOM
so wird es sein... warten Sie... zufällig. Der Punkt war, dass Sie nicht die Anwendung einer modulo-operation, der Wert, die Art und Weise, die Sie erwartet hatten. Sie erstellen ein array mit 3 - Elementen. Von denen das erste (index0
) ist eine unbegrenzte zufällige Zahl. Die zweite ist%
. Die Dritte ist100001
. Für eine array-variablearr
mit$arr
entspricht${arr[0]}
. So, wenn Sie$randno4
Sie sind auf${randno4[0]}
ist die grenzenlose Zufallszahl. - Ich will nicht zu verwirren Sie darüber, wäre aber sehr sehr sehr nützlich für mich zu wissen, ob oder nicht das nullte element ist eine zufällige Zahl zwischen 0 und 100001 oder nicht. Ist dies der Fall? Ist es eine andere Grenze, z.B. die int limit oder die double-precision-limit??? Vergessen Sie den rest der Reihe. Ich nicht die Mühe machen möchten, einen Kollegen über eine wissenschaftliche Arbeit, die Sie bereits veröffentlicht, wenn dies der Fall ist. Wenn es nicht ist, dann sollte ich zumindest heraus finden, ob Sie gefunden und das problem behoben.
- Der bash man-page erklärt die Palette der
RANDOM
. Es ist dokumentiert, als "eine zufällige ganze Zahl zwischen 0 und 32767". - Danke, das war sehr nützlich. Bash man - Seite- ist, dass eine website? Googeln es gibt Sie ziemlich viel trifft?
- Dies wurde in einem Papier? Sind Sie in der Lage, zu teilen, was Papier war es?
- Es ist ein Papier in der Vorlage, die ich denke, ist mit dem gleichen code. Ich sehe die einzelnen in Frage morgen. Will nicht unnötig Panik, aber jeder sollte überprüft werden. Ich weiß, dass Sie eine riesige MATLAB-fan und wird wohl geschrieben haben dies zu tun, all dieses Zeug in MATLAB (ich will nicht zu tun, dies aus verschiedenen Gründen, sind zu detailliert, um in nun). Es ist nicht ein Papier, über informatik, die ich beeile mich hinzuzufügen, haben wir (wie Sie sagen können, von meinem basic-Fragen) sind nicht die informatik-Abteilung. Wirklich zu schätzen Ihre Hilfe bei diesem. 🙂
man
Befehl dürfte so ziemlich das erste Linux-Befehl, den Sie lernen. Hier ist diebash
Mann Seite- Ich gab +1 auf die Frage (und @Etan), denn es hat mir geholfen, schnell zu verstehen, wo die seltsame Fehlermeldung kam (was war das Ergebnis von schlecht geschrieben regex für
grep
dass gräbt mal ausping
Ausgang, was zu fehlerhaften Eingabe fürbc
).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die erste Zeile sollte wie folgt aussieht :
(( ))
ist bash-Arithmetik, mit den führenden$
, wird der Wert ersetzt wird :$(( ))
Wenn Sie schrieb
du versuchen zu füttern, ein ARRAY mit einem arithmetischen Ausdruck mit der falschen syntax.
Sehen http://wiki.bash-hackers.org/syntax/arith_expr
Und schließlich, wie Etan Reisner sagte, Sie auch verwenden, $randno3 in der t_twall Zuordnung Linie, die nicht definiert ist
$randno3
Tippfehler.