Está na hora de resolver esse enigma que me incomoda há anos ...
Venho encontrando isso de vez em quando e pensei que este é o caminho a seguir:
$(comm "$(arg)")
E pensei que minha visão era fortemente apoiada pela experiência. Mas não tenho mais tanta certeza. O Shellcheck também não consegue se decidir. São os dois:
"$(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 é a lógica por trás?
(É o Shellcheck versão 0.4.4, btw.)
"$(dirname "$0")"/stop.bash
:? Parece funcionar ... Qual é a história?
shell_level_1 $(shell_level_2) shell_level_1
quando você está dentro do, $(....)
insere um "subnível" do shell, MAS você pode escrever nele como se estivesse no nível primário (ou seja, você pode escrever diretamente em "
vez 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
encontre \ "/ tmp / um arquivo \" `e print \$5
. Sem $(...)
necessidade: o shell se adapta ao novo nível e você pode escrever diretamente como se o seu intérprete agora estivesse nesse nível também.