Unix-Shell-Tipps, um Variablen aus einem Test einen booleschen Wert zuzuweisen

574
NeronLeVelu

Code, um die Anforderung im Kontext anzuzeigen (derzeit Unix-Ksh):

r=$( [ -z "foo" ] && echo true || echo false ) 

Gibt es einen besseren, einfacheren Weg, um rmit true oder false etwas zuzuweisen r=$( [ -z "foo" ]) (das scheint einen leeren Wert zu geben) oder r=[ -z "foo" ]das fehlgeschlagen ist.

0

2 Antworten auf die Frage

1
AFH

Das [ ... ]Konstrukt (oder das Äquivalent test ...) gibt einen Beendigungscode von 0 für wahr oder 1 für falsch zurück, erzeugt jedoch keine Ausgabe und gibt daher $( [ ... ] )immer eine leere Zeichenfolge zurück. Der zurückgegebene Beendigungscode ist in $?, rkann also auf 0 oder 1 gesetzt werden:

[ -z "foo" ]; r=$? 

Wenn Sie die Textwerte wollen trueund falsein r(im Gegensatz zu 0 und 1), dann wird Ihr Ausdruck ist grundsätzlich richtig, aber die folgende ist ein bisschen einfacher:

[ -z "foo" ] && r=true || r=false 
Im Grunde ist es das, was ich mein Skript mache. Das Echo ist vorhanden, weil es im ursprünglichen Skript eine generische Variable auf einer höheren Ebene zuweist. Ich vergesse, das $ zu verwenden. als eingang, danke für erklärung NeronLeVelu vor 6 Jahren 0
0
Gilles Quenot

Hier nicht der Fall:

$ b=false $ r=$b $ echo $r false $  
Hoppla, tut mir leid für den Zweck, dem ich den Wert zuweise, aber es ist das Ergebnis eines Tests. Ich passe die Anfrage an. NeronLeVelu vor 6 Jahren 0