2010-09-24 5 views
10

Es gibt zwei unterschiedliche Schreibweisen für die Befehlssubstitutions

FOO=$(echo bar) 

und

FOO=`echo bar` 

Soviel ich weiß, die erste Methode in heftiger Schlag definiert ist, während die zweite in sh definiert ist.

Betrachten Sie die folgende Verwendung der Befehlsersetzung in einem sh Skript.

#!/bin/sh 
FOO=$(echo bar) 

Macht das unter die Definition von bashism?

bashisms, das heißt Funktionen, die durch POSIX (nicht funktionieren in dash oder allgemeine /bin/sh) nicht definiert ist.

+0

Es gibt 2 gute Gründe, immer die modernere (und meiner Meinung nach richtige) Version zu verwenden. $() ist fast unendlich lesbarer als Backticks, und $ ($()) ist nestbar, was gelegentlich ein großer Vorteil ist. Es gibt heutzutage keinen guten Grund, Backticks zu benutzen. –

Antwort

10

Es ist das Gleiche. Also nein, es ist kein Bashismus oder nur mit bash verwandt.

Befehl Substitution
Befehlsersetzung erlaubt die Ausgabe eines Befehls an Stelle des Namens selbst Befehl wechselt werden müsste. Befehlsersetzung tritt auf, wenn der Befehl eingeschlossen ist wie folgt:

$(command) 

oder ('' backquoted '' Version):

`command` 

Die Schale erweitert den Befehl Substitution durch Befehl in einer Subshell-Umgebung ausführt und Ersetzen die Befehlssubstitution mit der Standardausgabe des Befehls, wobei Sequenzen von einem oder mehreren Zeilenenden am Ende der Substitution entfernt werden. (Embedded newlines vor dem Ende des Ausgangs nicht entfernt werden, aber während der Feldaufspaltung, können sie in Räume übersetzt werden, auf dem Wert des IFS in Abhängigkeit und unter Angabe, dass in Kraft ist.)


Ressourcen:

+0

Noch autoritativer, hier ist ein Link zur Open Group Base/IEEE 1003 Spezifikation: http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03 –

9

Tatsächlich ist die $( ... ) Befehlsersetzungssyntax von POSIX definiert, obwohl es nicht Teil des früheren SVIDsh Standards ist. Solange es Ihnen nicht darum geht, auf Pre-POSIX-Systemen zu laufen, sollte es in Ordnung sein.

Verwandte Themen