Ya es hora de resolver este enigma que me ha estado molestando durante años ...
Me he encontrado con esto de vez en cuando y pensé que este es el camino a seguir:
$(comm "$(arg)")
Y pensé que mi punto de vista estaba fuertemente respaldado por la experiencia. Pero ya no estoy tan seguro. Shellcheck tampoco puede decidirse . Son ambos:
"$(dirname $0)"/stop.bash
^-- SC2086: Double quote to prevent globbing and word splitting.
Y:
$(dirname "$0")/stop.bash
^-- SC2046: Quote this to prevent word splitting.
¿Cuál es la lógica detrás?
(Es Shellcheck versión 0.4.4, por cierto).
"$(dirname "$0")"/stop.bash
? Parece funcionar ... ¿Cuál es la historia?
shell_level_1 $(shell_level_2) shell_level_1
cuando está dentro del $(....)
, ingresa un "subnivel" de shell, PERO puede escribir en él como si estuviera en el nivel primario (es decir, puede escribir directamente en "
lugar de \"
, etc.). ej .: touch "/tmp/a file" ; echo "its size is: $(find "/tmp/a file" -ls | awk '{print $5}) ..." : if you used backticks you'd have to
encontrar \ "/ tmp / un archivo \" `y print \$5
. Sin $(...)
necesidad: el shell se adapta al nuevo nivel y puede escribir directamente como si su intérprete ahora también estuviera en ese nivel.