Ich sehe mir ein Bash-Skript mit folgendem Code an:
#!/bin/sh
set -e # Exit if any command fails
# If multiple args given run this script once for each arg
test $2 && {
for arg in $@
do $0 $arg
done
exit
}
.
.
.
Wie im Kommentar erwähnt, besteht der Zweck darin, "das Skript für jedes Argument auszuführen, wenn es mehr als ein Argument gibt". Ich habe einen Runner-Code, um dies zu testen:
# install-unit
# If multiple args given run this script once for each arg
test $2 && {
echo "\$0: $0"
echo "\$1: $1"
echo "\$2: $2"
echo "test \$2 && is true"
}
test $2 && {
# note this is just a regular bash for loop
# http://goo.gl/ZHpBvT
for arg in $@
do $0 $arg
done
exit
}
echo "running: $1"
was Folgendes ergibt:
sh ❯ ./multiple-run.sh cats and dogs and stuff
$0: ./multiple-run.sh
$1: cats
$2: and
test $2 && is true
running: cats
running: and
running: dogs
running: and
running: stuff
sh ❯ ./multiple-run.sh cats
running: cats
Ich möchte, dass jemand das test $2 && {}
Teil und die exit
eingebaute Shell auspackt. Am Anfang dachte ich, dass das test $2
prüft, ob es mehr Argumente gibt, und vielleicht ist es das, aber es sieht seltsam aus, weil es so aussieht, als gäbe es zwei Ausdrücke getrennt durch das "und" &&
, und ich bin auch nur verwirrt, was zum Teufel das exit
eingebaute tut.
Einfache englische Erklärungen mit Beispielen und Dokumentationsreferenzen sind willkommen :)
Vielen Dank!
Edit: Danke Stéphane Chazelas dafür. Für alle, die durch die Änderung der for-Schleifensyntax verwirrt sind, lesen Sie Nummer 3 in diesem Geekstuff- Artikel. Zusammenfassen:
echo "positional parameters"
for arg do
echo "$arg"
done
echo "\nin keyword"
for arg in "$@"
do echo "$arg"
done
gibt uns:
❯ ./for-loop-positional.sh cats and dogs
positional parameters
cats
and
dogs
in keyword
cats
and
dogs
for arg do
Syntax.