Comme pour stocker tous les arguments de ligne de commande dans un script bash dans une seule variable

StackOverflow https://stackoverflow.com/questions/841670

Question

Supposons que j'ai un script bash appelé foo.sh .

Je voudrais l'appeler comme ça

foo.sh Here is a bunch of stuff on the command-line

et j'aimerais qu'il stocke tout le texte dans une seule variable et l'imprime.

Donc, ma sortie serait:

Here is a bunch of stuff on the command-line

Comment ferais-je cela?

Était-ce utile?

La solution

echo "$*"

ferait ce que vous voulez, à savoir imprimer tous les arguments de la ligne de commande, séparés par un espace (ou, techniquement, quelle que soit la valeur de $IFS soit). Si vous voulez le stocker dans une variable, vous pouvez faire

thevar="$*"

Si cela ne répond pas assez bien à votre question, je ne sais pas quoi dire d'autre ...

Autres conseils

Si vous voulez éviter que $ IFS ne soit impliqué, utilisez $ @ (ou ne mettez pas $ * entre guillemets)

$ 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

Le comportement IFS suit également les affectations de variables.

$ 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

Notez que si l'affectation à $ IFS a été effectuée après l'affectation de $ splatvar, toutes les sorties seraient alors identiques ($ IFS n'aurait aucun effet dans l'exemple & "; atsplat2 &";) .

Regardez la variable $*. Il combine tous les arguments de ligne de commande en un seul.

echo "$*"

Cela devrait faire ce que vous voulez.

Plus d'infos ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top