Ich schreibe ein Bash-Skript, das einige optionale Parameter aufnimmt. Ich möchte sie übersetzen und an ein anderes Skript übergeben. Allerdings habe ich Schwierigkeiten, die optionalen Parameter elegant zu übergeben.Wie kann ich optionale Parameter an einen anderen Befehl in einem Bash-Skript übergeben?
Hier ist eine Übersicht darüber, was konnte ich in Pseudo-Code zum Laufen zu bringen:
a.sh:
if arg1 in arguments; then
firstArg="first argument"
fi
if arg2 in arguments; then
secondArg="second argument"
fi
./b.sh $firstArg $secondArg "default argument"
Beachten Sie die Räume in den Argumenten.
b.sh:
for arg in "[email protected]"
do
echo $arg
done
Ich möchte b.sh
nennen, optional mit firstArg
und secondArg
und ein Standardargument wie so:
./b.sh $firstArg $secondArg "default argument"
Das Problem dabei ist, dass, wenn $firstArg
oder $secondArg
Sind Zeichenfolgen mit Leerzeichen, werden sie als mehrere Argumente dargestellt, und die Ausgabe wird etwa lauten:
Okay, das ist einfach zu beheben, lassen Sie uns die gesamte Kette der Argumente erfassen, indem Sie Anführungszeichen um es wie so hinzufügen:
./b.sh "$firstArg" "$secondArg" "defaultArg"
Problem ist, wenn beispielsweise firstArg
nicht gesetzt ist, führt dies zu eine leere Zeile (wie es ""
als Parameter interpretiert wird), so dass der Ausgang so etwas wie sein:
(blank line here)
second argument
defaultArg
habe ich auch versucht, einen String konstruieren und an den Shell-Skript vorbei, aber es funktioniert nicht scheinen so zu funktionieren (es int Erregt die ganze Zeichenfolge als Argument, auch wenn ich die Argumente durch Anführungszeichen getrennt hinzufüge).
Beachten Sie, dass das Aufrufen von b.sh
von meiner Befehlszeile mit den angegebenen Argumenten funktioniert. Gibt es eine Möglichkeit zu simulieren, wie das in einem Bash-Skript funktioniert?
Abgesehen: Nur weil ich Ihren Vorsprung bin kopieren und mit '.sh' Erweiterungen auf ausführbaren Dateien (d. h. Dateien mit der + x-Berechtigung, gegen die ein 'execv()' - Familienaufruf erfolgreich ist) bedeutet nicht, dass es eine gute Idee ist. Im Allgemeinen sollten Befehle in UNIX keine Erweiterungen haben, egal ob sie über ein Shell-Skript, ein Python-Skript, eine kompilierte Binärdatei usw. bereitgestellt werden. –
Können Sie explizit klären, ob dies für Code ist, der '#! bin/sh' oder '#!/bin/bash'? –
Ich benutze bash. – Andrew