Il est grand temps de résoudre cette énigme qui me dérange depuis des années ...
Je l'ai rencontré de temps en temps et j'ai pensé que c'était la voie à suivre:
$(comm "$(arg)")
Et j'ai pensé que mon point de vue était fortement soutenu par l'expérience. Mais je n'en suis plus si sûr. Shellcheck ne peut pas non plus se décider. C'est à la fois:
"$(dirname $0)"/stop.bash
^-- SC2086: Double quote to prevent globbing and word splitting.
Et:
$(dirname "$0")/stop.bash
^-- SC2046: Quote this to prevent word splitting.
Quelle est la logique derrière?
(Il s'agit de la version 0.4.4 de Shellcheck, btw.)
"$(dirname "$0")"/stop.bash
:? Cela semble fonctionner ... Quelle est l'histoire?
shell_level_1 $(shell_level_2) shell_level_1
lorsque vous êtes à l'intérieur du, $(....)
vous entrez un "sous-niveau" de shell, MAIS vous pouvez l'écrire comme si vous étiez au niveau primaire (c'est-à-dire que vous pouvez directement écrire "
au lieu de \"
, etc.). ex: touch "/tmp/a file" ; echo "its size is: $(find "/tmp/a file" -ls | awk '{print $5}) ..." : if you used backticks you'd have to
trouver \ "/ tmp / un fichier \" `et print \$5
. Avec $(...)
pas besoin: les adapte shell au nouveau niveau et vous pouvez écrire directement comme si votre interprète est maintenant à ce niveau aussi.