Comme indiqué ci-dessous, la substitution de commande modifie l'interprétation des arguments de ligne de commande entre guillemets. Qu'est-ce qui se passe sous le capot, et y a-t-il une solution de contournement?La commande-substitution interrompt les arguments avec des espaces
$ cat dumpargs.sh
#! /usr/bin/env bash
for i in "[email protected]"
{
echo "$i"
}
$ cat testfile.txt
'1 space' '2 space'
$ ./dumpargs.sh $(cat testfile.txt) ## produced undesired output
'1
space'
'2
space'
$ ./dumpargs.sh '1 space' '2 space' ## produces desired output
1 space
2 space
http://shellcheck.net/ aurait attrapé votre problème (le manque de citations menant à la fente de chaîne) pour vous. Bien que l'attente que les citations * littérales * (qui n'affectent pas le fractionnement des chaînes) soient traitées comme des citations * syntaxiques * (ce qui est le cas) est peut-être un problème plus important. –
Ceci est également très proche de [BashFAQ # 50] (http://mywiki.wooledge.org/BashFAQ/050). –
Réponse courte, utilisez 'xargs':' cat testfile.txt | xargs./Dumpargs.sh' – nobar