Ich habe dieses Stück Code:
if(("$op" == "q")); then
, die diesen Fehler wirft:
l5p3.sh: line 10: ((: + == q: syntax error: operand expected (error token is "== q")
Was ist das Problem? Wie vergleicht man $ op mit dem Buchstaben $ q?
Ich habe dieses Stück Code:
if(("$op" == "q")); then
, die diesen Fehler wirft:
l5p3.sh: line 10: ((: + == q: syntax error: operand expected (error token is "== q")
Was ist das Problem? Wie vergleicht man $ op mit dem Buchstaben $ q?
((...))
(für arithmetische Ausdrücke) ist wahrscheinlich nicht das, was Sie wollen. Überprüfen Sie folgendes:
if (("asd" == "bla")); then
echo test
else
echo bah
fi
Er druckt test
in Bash und ein Fehler in einem streng bourne-kompatible Shell wie dash
.
Versuchen Sie Folgendes statt:
if [[ $op == q ]]; then
warum nicht ((und))? So arbeitete ich vorher, mit ((und)) und es funktionierte gut – FinalDestiny
@FinalDestiny '((' und '))' sind für mathematische Operationen. Sie wollen '[' 'und']] 'oder' ['und'] '(die ziemlich verschieden sind - und ersteres ist normalerweise besser) zum Vergleichen von Strings. –
@NiklasB. '(($ op == q))' würde tatsächlich Déferenzierung von '$ q' sein und nach einer Zahl suchen; Es ist eine ganz andere Sache als '[[$ op = q]]' '. (Quotes werden nicht auf der linken Seite eines '[['] Ausdruck benötigt, im Gegensatz zu einem '[' ', und sie werden nur auf der rechten Seite benötigt, wenn dieser Wert als glob Muster interpretiert werden könnte) . –
Für Stringvergleichen Sie doppelte eckige Klammern nicht Klammer verwenden möchten. Das richtige zu schreiben wäre:
if [[ "$op" == "q" ]]; then
Doppelklammer werden für arithmetische nicht boolesche Ausdrücke verwendet. Siehe http://tldp.org/LDP/abs/html/dblparens.html
JA! FUNKTIONIERT! Danke. – FinalDestiny
Versuchen Sie, diese zu ändern, Räume zwischen den [] sind wirklich wichtig:
op="q"
if [ "$op" == "q" ]; then
echo "hi"
fi
oder Sie können durch die Art und Weise, sein liberaler In der Regel, wie diese
if test "$op" = "q" ; then
echo 'hi'
fi
tun in Ihrem Abstand beim Schreiben von Shell-Skripten: 'if [" $ op "=" q "]' wird funktionieren, während 'if [$ op = q]' nicht funktioniert. –