Bedingung innerhalb der Ausführungszeile in Bash laden
425
Juan
Ich möchte einen Befehl mit einer Option ausführen, die von der Zuweisung einer Variablen abhängt. Wenn die Variable festgelegt ist, laden Sie die Option mit dem Wert. Wenn nicht, laden Sie diese Option nicht. Das ist was ich habe:
if [ -n "$variable" ] then command ... -option $variable else command ... fi
Die Idee wäre, diesen Befehl mit der Bedingung innerhalb eines einzigen Befehls zusammenzuführen, damit ich die anderen Optionen des Befehls nicht zweimal wiederholen muss.
Vielen Dank für Ihre Zeit.
Ich habe eine einfachere Lösung als die, die Sie akzeptiert haben, bitte schauen Sie sich diese an. Prost.
MariusMatutiae vor 8 Jahren
0
Da dies Bash-Arrays verwendet, funktioniert dies auch, wenn $variableLeerzeichen oder andere schwierige Zeichen enthalten sind.
Wie es funktioniert
opts=()
Dadurch wird ein leeres Array erstellt opts.
[ "$variable" ] && opts+=(-option "$variable")
Wenn $variablenicht leer ist, hängen wir -optionund $variablean das Array an opts.
command ... "$"
Dies führt Ihren Befehl aus. Wenn optsnicht leer, werden dessen Elemente zum Befehl hinzugefügt. Wenn optsleer ist, wird nichts hinzugefügt: es wäre so, als wäre "$"es überhaupt nicht da.
Vielen Dank! Es hat wie ein Zauber funktioniert. Nur aus Neugierde, wofür steht das "@"?
Juan vor 8 Jahren
0
@Juan Froh, dass es für dich funktioniert hat. Das "@" in "$ " weist bash an, jedes Element von "opts" zu einem separaten Wort zu erweitern.
John1024 vor 8 Jahren
0
0
JakeGould
Dann nimm deinen Befehl und mache es zu einer Funktion wie folgt:
function command_function () { command ... -option $variable } if [ -n "$variable" ] then command_function ... -option $variable else command_function ... fi
Nur damit Sie wissen, dass die Klammern in der Bash-Funktion nichts weitergeben.
0
levif
Verwendung heftiger Schlag Substitution ( Shell-Parameter-Expansion ) für eine präzise, noch lesbar Syntax:
$ echo $ $ variable=yes $ echo $ -option yes
0
MariusMatutiae
Der folgende Einliner wird es tun:
[ x"$VARIABLE" = x ] && echo UNSET || echo SET
Dies testet, ob die Variable x "$ VARIABLE" gleich x ist, mit anderen Worten, wenn $ VARIABLE leer ist; Wenn der Test erfüllt ist, wird die erste Option ( Echo UNSET ) ausgeführt. Wenn der Test nicht erfüllt ist, wird die letzte Option ausgeführt ( Echo SET ). Wenn Sie im zweiten Fall nichts unternehmen möchten, können Sie dies tun
[ x"$VARIABLE" = x ] && echo UNSET || :
Dies ist erheblich einfacher als bei den anderen Lösungen, ermöglicht die Bewertung der Bedingung nur einmal und ist robust gegenüber merkwürdigen Zeichen, die in VARIABLE auftreten.