2016-04-18 6 views
1

Wie kann ich hinzufügen, wenn sonst zwischen einer Variablenzuweisung?Bash wenn sonst und Variablenzuweisung

Etwas wie:

var="statement "[ $var2 -eq 0 ] && "is true" || "is false" 

ich vermeiden wollen:

if [ $var2 -eq 0 ]; then 
    var="statement is true" 
else 
    var="statement is false" 
fi 

dies getan werden kann?

Dank

+0

Nicht direkt, nein. Es gibt einige String-Substitutionen, die sich unterschiedlich verhalten, abhängig davon, ob eine Variable nicht definiert (oder definiert, aber leer ist) oder nicht, aber nichts, was die Zeichenfolge "0" als besonders signifikant behandelt. – tripleee

+0

Für eine wirklich undurchsichtige Lösung können Sie die Tatsache ausnutzen, dass '$ 0' gesetzt wird, aber andere Positionsparameter in einer Funktion ohne Parameter leer sind. – tripleee

+3

Vermeiden Sie die längere Form. Alles, was Ihnen dabei aufkommt, wird auf lange Sicht weniger klar sein und ist es nicht wert. –

Antwort

1

Nicht sicher sowieso da ist, das eine gute Codierung in Betracht gezogen werden könnte, aber hier ist zwei Möglichkeiten, prägnant sind (Bitte fügen Sie einen Kommentar in Ihrem Code, was passiert, wenn Sie diese verwenden)

Auf diese Weise initialisiert Ihre Variable "var" und wertet "var1" aus (auch diese Variablennamen nie verwenden, auch in den Beiträgen zu SO) zu sehen Wenn es sich um einen Wert ungleich null/null handelt. Dann hängt entweder wahr oder falsch an.

var="statement is " 
(($var1)) && var+=true || var+=false 

Der andere Weg ist Ihre Logik zu ändern, var auf „“ (nichts), wenn falsch, und auf „true“, wenn wahr zu haben. Setzen Sie dann eine nicht gesetzte Variable standardmäßig auf "false" und geben Sie das Wahr zurück, das ihr zugewiesen wurde, wenn es gesetzt ist. Man bash, suche nach `: - 'für weitere Informationen.

var="statement is ${var1:-false}" 
+0

Danke, das funktioniert in meinem Fall – Pulkit

2

Do:

[ "$var2" -eq 0 ] && var="statement is true" || var="statement is false" 

Technisch var="statement is false" wil wenn läuft entweder [ "$var2" -eq 0 ] oder var="statement is true" nicht aber die Chance des Scheiterns von var="statement is true" ist praktisch fast null.

0

$(...) Ausdrücke Nest innen Paare von doppelten Anführungszeichen

Daher können Sie folgendes tun:

var="abc$((($var2==0)) && printf '%s' ' is true' || printf '%s' ' is false')" 
+2

Ich fühle, dass ich eine Abscheulichkeit geschrieben habe. – Benoit

+0

Füllen Sie ein Array 'bool = (false true)' vor, und indizieren Sie es direkt mit dem Vergleich. 'printf 'abc ist% s \ n'" $ {bool [var2 == 0]} "'. (Und wenn 'var2' {0,1} -bewertet ist, brauchst du den Vergleich natürlich nicht einmal.) – chepner