2017-09-08 1 views
0

ein Bash-Skript soll seine Argumente zu einem anderen Skript übergeben, die ein Python-Skript in meinem Fall ist:Bash-Skript: Vermeiden Sie leere Zeichenkette Argumente

python test.py "$1" "$2" "$3" 

Das Python-Skript, das argparse Bibliothek verwendet und wird wieder mit einem Fehler, wenn leere String-Argumente vorhanden sind, dh das Parent-Script wurde mit weniger als 3 Parametern aufgerufen. Der Grund, warum ich in diesem Beispiel ein Python-Skript verwende, ist, dass es wahrscheinlich nicht in einem untergeordneten Shell-Skript erkannt wird, wenn unbenutzte "leere Zeichenfolge" -bewertete Argumente vorhanden sind.

Eine Möglichkeit, den Fehler zu umgehen, ist die Anzahl der Argumente zu überprüfen $# und ausdrücklich jede tragfähige Fall behandeln:

if [ $# -eq 0 ] 
then 
    python test.py 
elif [ $# -eq 1 ] 
then 
    python test.py "$1" 
elif [ $# -eq 2 ] 
then 
    python test.py "$1" "$2" 
else 
    python test.py "$1" "$2" "$3" 
fi 

Bitte beachte, dass ich die Argumente zitieren, weil sie Leerzeichen enthalten.

Welche Alternativen gibt es für diese (aufgeblähte) Lösung?

Die Lösung sollte nicht davon abhängen, die Argumentliste als Ganzes weiterzugeben. Es könnte wünschenswert sein, die Reihenfolge der Argumente zu ändern oder andere lokale Variablen als Argumente für das Python-Skript hinzuzufügen.

Antwort

1

"[email protected]" erweitert zu nichts, wenn es keine Argumente gibt, so können Sie einfach

python test.py "[email protected]" 

verwenden Wenn Sie sicher, dass ein viertes Argument an das Skript machen wollen (oder mehr) ist nicht auf das Python-Skript übergeben , verwenden Sie die bash Erweiterung

python test.py "${@:1:3}" 
Verwandte Themen