J'ai toujours pensé que les backticks de bash étaient "exécuter la sortie de 'some_command'
". Que se passe-t-il dans la suite ... considérons un script myscript.pl
qui imprime le texte suivant:
export PS1 = "[STRING] $ PS1"
Si je copie la sortie de cat file.txt
sur la ligne de commande et que je l' exécute, "[STRING]" est ajouté au début de mon invite.
Par contre, le backtick-ing 'myscript.pl'
me rend rapide "[STRING]
. Qu'est-ce qui se passe?
Réponses:
bash
ne pas exécuter la sortie d'une commande backtick, ne la remplace. (La fonctionnalité s'appelle après tout substitution de commande .)Si la substitution n'est pas entre guillemets doubles, le fractionnement des mots est effectué dans la sortie de la commande, mais les guillemets et autres caractères spéciaux sont ignorés.
export PS1="[STRING] $PS1"
est simplement divisé en$IFS
:export
PS1="[STRING
$PS1"
Si vous voulez exécuter le contenu d'un fichier, sourcez-le:
ou non-POSIX:
Si vous souhaitez que toutes les analyses standard soient appliquées à une substitution - par exemple une variable - vous pouvez utiliser
eval "$commands"
oueval "$(foo)"
oueval "`foo`"
. Mais soyez très prudent avec cela.la source