Comme pour stocker tous les arguments de ligne de commande dans un script bash dans une seule variable
-
20-08-2019 - |
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?
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.