Es ist höchste Zeit, dieses Rätsel zu lösen, das mich seit Jahren beschäftigt ...
Ich habe dies von Zeit zu Zeit getroffen und dachte, das ist der richtige Weg:
$(comm "$(arg)")
Und dachte, meine Ansicht wurde stark von der Erfahrung gestützt. Aber ich bin mir nicht mehr so sicher. Shellcheck kann sich auch nicht entscheiden. Es ist beides:
"$(dirname $0)"/stop.bash
^-- SC2086: Double quote to prevent globbing and word splitting.
Und:
$(dirname "$0")/stop.bash
^-- SC2046: Quote this to prevent word splitting.
Was ist die Logik dahinter?
(Es ist übrigens Shellcheck Version 0.4.4.)
"$(dirname "$0")"/stop.bash
:? Es scheint zu funktionieren ... Was ist die Geschichte?
shell_level_1 $(shell_level_2) shell_level_1
Sie sich das folgendermaßen vor $(....)
:: Wenn Sie sich in der Shell befinden, geben Sie eine "Unterebene" der Shell ein, ABER Sie können darin schreiben, als ob Sie sich auf der Primärebene befänden (dh Sie können direkt "
anstelle von \"
usw. schreiben ). Beispiel: touch "/tmp/a file" ; echo "its size is: $(find "/tmp/a file" -ls | awk '{print $5}) ..." : if you used backticks you'd have to
Finden Sie "/ tmp / a file" und print \$5
. Mit $(...)
keine Notwendigkeit: die Schale passt sich an die neue Ebene und Sie können auch direkt schreiben , als ob Ihr Dolmetscher jetzt auf dieser Ebene auch.