In meinem Bash-Skript möchte ich null, einen oder zwei Parameter analysieren (das Skript kann sie erkennen) und dann die verbleibenden Parameter an einen im Skript aufgerufenen Befehl weiterleiten. Wie kann ich das machen?
In meinem Bash-Skript möchte ich null, einen oder zwei Parameter analysieren (das Skript kann sie erkennen) und dann die verbleibenden Parameter an einen im Skript aufgerufenen Befehl weiterleiten. Wie kann ich das machen?
Antworten:
Verwenden Sie den shift
integrierten Befehl, um die Argumente zu "essen". Rufen Sie dann den untergeordneten Prozess auf und übergeben Sie ihm das "$@"
Argument, um alle verbleibenden Argumente einzuschließen. Beachten Sie die Anführungszeichen, sie sollten beibehalten werden, da sie dazu führen, dass die Erweiterung der Argumentliste ordnungsgemäß in Anführungszeichen gesetzt wird.
$@
behandelt im Wesentlichen jedes Element des Arrays als Zeichenfolge in Anführungszeichen - sie werden ohne Erweiterungsmöglichkeit weitergegeben. Es stellt auch sicher, dass jedes als separates Wort gesehen wird. Diese Erklärung zusammen mit einem Testskript
bash verwendet den Befehl shift :
zB shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 erzeugt
1
2 3
$1
ohne sie als zu zitieren "$1"
, führt die Shell eine Wortaufteilung durch, sodass z. B. foo bar
als foo
und bar
separat weitergeleitet wird.
Bash unterstützt Teilmengenparameter (siehe Teilmengen und Teilzeichenfolgen ), sodass Sie auswählen können, welche Parameter wie folgt verarbeitet / übergeben werden sollen.
öffne neue Datei und bearbeite sie: vim r.sh
:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"
starte es:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10
Das Ergebnis ist:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10