2017-02-08 6 views
1

iF jemand könnte mir erklären, was unten Code bedeutet ("-z $ {1 + x}"), dann werde ich mich freuen. Ich habe eine Portion Code und ich versuche es zu verstehen. Ich weiß, dass es etwas mit String überprüft, aber nicht genau weiß.Erklärung der bash wenn Befehl

if [ -z ${1+x} ]; then 
    error "Please provide some information" 1; 
fi 

Thansk im Voraus

+3

http://explainshell.com/explain?cmd = wenn +% 5B + -z +% 24% 7B1% 2Bx% 7D +% 5D% 3B + dann ++++++ fehler +% 22Please + stellen + einige + informationen% 22 + 1% 3B + fi - Schwebeflug über die verschiedenen Teile ausführliche Erklärung erhalten – baao

Antwort

2

[ ] Das Konstrukt führt Tests. Es gibt 0 zurück, wenn der Test "wahr" ist, und einen Wert ungleich Null, wenn der Test "falsch" ist.

Der Test -z benötigt ein Argument und gibt "true" zurück, wenn das Argument eine leere Zeichenfolge (Länge null) ist.

Die Erweiterung "$ {1 + x}" wird auf einen bestimmten Wert erweitert (x in diesem Fall, aber Sie könnten dort setzen, was Sie wollen), wenn der Positionsparameter 1 gesetzt ist. Es wird gesetzt, wenn ihm ein Wert zugewiesen wurde (auch wenn dieser Wert eine leere Zeichenkette ist), andernfalls wird er aufgehoben. Wenn der Positionsparameter nicht festgelegt ist, erzeugt die Erweiterung eine leere Zeichenfolge.

Bitte beachten Sie, dass es auch auf Variablennamen funktioniert. Sie könnten zum Beispiel "$ {MYVAR + x}" verwenden.

Der gesamte if Block zeigt eine Fehlermeldung an, wenn dem Skript oder der Funktion kein Wert als Argument 1 übergeben wurde. Wenn jedoch ein leerer Wert übergeben wurde (d. H. myscript ""), wird keine Fehlermeldung angezeigt.

+0

Danke, das erklärt alles :) – otemek

1

Könnte besser erklärt werden mit einem Beispiel,

Case-1: foo ungesetzt ist

unset foo 

if [[ ${foo+isset} = isset ]]; then 
    echo "foo is set..." 
else 
    echo "foo is not set..." 
fi 

Lauf es produziert,

bash -x script.sh 
+ unset foo 
+ [[ '' = isset ]] 
+ echo 'foo is not set...' 
foo is not set... 

Case-2: foo gesetzt und leer

$ bash -x script.sh 
+ foo= 
+ [[ isset = isset ]] 
+ echo 'foo is set...' 
foo is set... 

Case-3: foo gesetzt ist und einen gültigen Wert,

$ bash -x script.sh 
+ foo=something 
+ [[ isset = isset ]] 
+ echo 'foo is set...' 
foo is set... 

Also, was im Grunde ${paramter+word} tut, ist

ein Formular an nichts erweitert, wenn der Parameter nicht gesetzt oder leer ist. Wenn es gesetzt ist, dehnt es nicht auf den Wert des Parameters, aber bis zu einem gewissen Text können Sie festlegen:

So

if [ -z ${1+x} ]; then 

prüft, ob Positionsparameter $1 auf einen Wert gesetzt, bei dem Fall, es wäre ein Wert x zugewiesen worden und die Überprüfung der if [ -z 'x' ] wäre fehlgeschlagen, aber wenn $1 ist leer, wäre die Erweiterung if [ -z '' ] was bedeutet, dass die test wahr behauptet.