J'ai les deux scripts suivants
cendre:
#!/bin/bash
./b.sh 'My Argument'
b.sh:
#!/bin/bash
someApp $*
Le binaire someApp reçoit $*
comme 2 arguments («My» et «Argument») au lieu de 1.
J'ai testé plusieurs choses:
- L'exécution de someApp uniquement
b.sh
fonctionne comme prévu - Itérer + faire écho aux arguments dans
b.sh
fonctionne comme prévu - Utiliser
$@
au lieu de$*
ne fait pas de différence
someApp "$*"
ousomeApp "$@"
Réponses:
$*
, sans guillemets, se développe en deux mots. Vous devez le citer pour qu'ilsomeApp
reçoive un seul argument.Il est possible que vous souhaitiez utiliser à la
$@
place, de sorte quesomeApp
cela recevrait deux arguments si vous deviez appelerb.sh
commeAvec
someApp "$*"
,someApp
recevrait un seul argumentMy first My second
. AvecsomeApp "$@"
,someApp
recevrait deux arguments,My first
etMy second
.la source
$@
et$*
fonctionnent à l'identique.IFS=$'\n'
. Je ne sais pas pourquoi.