Wie alle Argumente Befehlszeilen zu speichern, um einen Bash-Skript in eine einzelne Variable
-
20-08-2019 - |
Frage
Lassen Sie uns sagen, dass ich ein Bash-Skript namens foo.sh .
Ich mag es so nennen
foo.sh Here is a bunch of stuff on the command-line
und ich möchte es all dieser Text in einer einzigen Variablen speichern und drucken.
Also meine Ausgabe wäre:
Here is a bunch of stuff on the command-line
Wie würde ich das tun?
Lösung
echo "$*"
würde das tun, was Sie wollen, nämlich die gesamten Befehlszeilenargumente Ausdruck von einem Leerzeichen getrennt (oder, technisch gesehen, was auch immer der Wert von $IFS
ist). Wenn Sie es in einer Variablen speichern möchten, können Sie tun
thevar="$*"
Wenn das nicht Ihre Frage gut genug beantworten, ich bin nicht sicher, was ich noch zu sagen ...
Andere Tipps
Wenn Sie mit IFS beteiligt $ zu vermeiden, verwenden Sie $ @ (oder nicht $ * in Anführungszeichen)
$ cat atsplat
IFS="_"
echo " at: $@"
echo " splat: $*"
echo "noquote: "$*
$ ./atsplat this is a test
at: this is a test
splat: this_is_a_test
noquote: this is a test
Das IFS Verhalten folgt Variablenzuweisungen, auch.
$ cat atsplat2
IFS="_"
atvar=$@
splatvar=$*
echo " at: $atvar"
echo " splat: $splatvar"
echo "noquote: "$splatvar
$ ./atsplat2 this is a test
at: this is a test
splat: this_is_a_test
noquote: this is a test
Beachten Sie, dass, wenn die Zuordnung zu IFS $ nach der Zuweisung von splatvar $ gemacht wurden, dann werden alle Ausgänge gleich sein würde ($ würde IFS keine Wirkung in der „atsplat2“ Beispiel haben).
Haben Sie einen Blick auf die $*
Variable. Es vereint alle Befehlszeilenargumente in einem.
echo "$*"
Dies sollte das tun, was Sie wollen.