Die vier Beispiele sind funktional äquivalent.
Backticks sind veraltet, und wenn Sie keine 1970-Shell wie eine Bourne-Shell (wie Heirloom) verwenden, benötigen Sie sie nicht. Das Hauptproblem ist, dass sie ziemlich schwer zu verschachteln sind. Versuchen Sie:
$ echo $(uname | $(echo cat))
Linux
$ echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat
Auf der rechten Seite einer Befehlszeile mit nur einer Zuweisung ist es nicht erforderlich (aber harmlos), die Erweiterung zu zitieren, da die Erweiterung ohnehin als zitiert betrachtet wird:
$ var=$(uname)
Dies ist jedoch nicht immer der Fall. Eine Zuweisung für den Befehlsexport wird als Argument angesehen und in einigen Shells (nicht in Bash) aufgeteilt und globalisiert:
$ dash -c 'export MYVAR=`echo a test`;echo "$MYVAR"'
a
Die gleichen Überlegungen gelten für local
( Werden Anführungszeichen für die Zuweisung lokaler Variablen benötigt? ) Und declare
(und einige andere).
Was Sie tun sollten, um "es zu beheben", ist:
x=$(command -v r2g)
Und manchmal (für tragbare Skripte):
export x="$(command -v r2g)"
"
meiner Meinung nach in Anführungszeichen gesetzt werden .Ja, meine Vermutung sieht laut diesem Dokument richtig aus: https://github.com/anordal/shellharden/blob/master/how_to_do_things_safely_in_bash.md
Es sagt:
quelle