Najwyższy czas rozwiązać tę zagadkę, która niepokoi mnie od lat ...
Spotykałem się z tym od czasu do czasu i myślałem, że to jest właściwa droga:
$(comm "$(arg)")
I pomyślałem, że moje zdanie jest mocno poparte doświadczeniem. Ale nie jestem już taki pewien. Shellcheck też nie może się zdecydować. Oba są:
"$(dirname $0)"/stop.bash
^-- SC2086: Double quote to prevent globbing and word splitting.
I:
$(dirname "$0")/stop.bash
^-- SC2046: Quote this to prevent word splitting.
Jaka jest logika?
(Jest to wersja Shellcheck 0.4.4, btw.)
"$(dirname "$0")"/stop.bash
? Wydaje się, że działa ... Jaka jest historia?
shell_level_1 $(shell_level_2) shell_level_1
gdy jesteś w środku $(....)
, wchodzisz w „podpoziom” powłoki, ALE możesz pisać w niej tak, jakbyś był na poziomie podstawowym (tzn. możesz pisać bezpośrednio "
zamiast \"
, itp.). np. touch "/tmp/a file" ; echo "its size is: $(find "/tmp/a file" -ls | awk '{print $5}) ..." : if you used backticks you'd have to
znajdź \ "/ tmp / plik \" i print \$5
. Bez $(...)
potrzeby: powłoka dostosowuje się do nowego poziomu i możesz pisać bezpośrednio, tak jakby Twój tłumacz również był na tym poziomie.