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?

War es hilfreich?

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.

Mehr Infos hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top