mein Problem:Pass leere Variable in bash
#!/bin/bash
function testFunc(){
echo "param #1 is :" $1
echo "param #2 is :" $2
}
param1="param1"
param2="param2"
testFunc $param1 $param2
Auf diese Weise ist der Ausgang:
param #1 is : param1
param #2 is : param2
Aber wenn ich gesetzt param1 zu leeren String:
param1=""
Dann ist der Ausgang ist das folgende:
param #1 is : param2
param #2 is :
Ich vermute das Problem ist, dass, wenn der erste Parameter leer ist, es nicht deklariert wird, so dass es tatsächlich nicht als Funktionsparameter übergeben wird.
Wenn das das Problem ist, gibt es eine Möglichkeit, eine Variable "leere Zeichenfolge" in bash zu deklarieren, oder gibt es eine Problemumgehung, um das erwartete Verhalten zu erhalten?
Hinweis: Es funktioniert wie erwartet, wenn ich die Funktion wie folgt aufrufen:
testFunct "" $param2
Aber ich will sauber um den Code zu halten.
UPDATE:
entdeckte ich kürzlich die -u-Flag, das einen Fehler auslöst, falls eine ungebundene Variable über verwendet werden soll.
$ bash -u test.sh
param #1 is : param1
test.sh: line 5: $2: unbound variable
Reinigen sollte die Korrektheit nicht überschreiben. – chepner
Sie bevorzugen es also, das richtige Durcheinander zu behalten, anstatt nach einer sauberen und korrekten Lösung zu suchen? – kupsef
Wenn der Code falsch ist, wen interessiert es, wenn es sauber ist? Eine Parametererweiterung nicht zu zitieren, weil Sie denken, dass sie sauberer aussieht, ist falsch. – chepner