È giunto il momento di risolvere questo enigma che mi dà fastidio da anni ...
L'ho incontrato di tanto in tanto e ho pensato che fosse la strada da percorrere:
$(comm "$(arg)")
E ho pensato che il mio punto di vista fosse fortemente supportato dall'esperienza. Ma non ne sono più così sicuro. Anche Shellcheck non riesce a decidersi. È entrambi:
"$(dirname $0)"/stop.bash
^-- SC2086: Double quote to prevent globbing and word splitting.
E:
$(dirname "$0")/stop.bash
^-- SC2046: Quote this to prevent word splitting.
Qual è la logica dietro?
(È Shellcheck versione 0.4.4, tra l'altro.)
"$(dirname "$0")"/stop.bash
:? Sembra funzionare ... Qual è la storia?
shell_level_1 $(shell_level_2) shell_level_1
quando sei dentro $(....)
a un "sotto-livello" di shell, MA puoi scriverlo come se fossi al livello primario (cioè, puoi scrivere direttamente "
invece di \"
, ecc.). es: touch "/tmp/a file" ; echo "its size is: $(find "/tmp/a file" -ls | awk '{print $5}) ..." : if you used backticks you'd have to
trova \ "/ tmp / a file \" `e print \$5
. Con $(...)
nessun bisogno: le adatta shell al nuovo livello e si può scrivere direttamente come se l'interprete ora è a quel livello anche.