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.
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