2010-09-24 12 views
10

Hay dos sintaxis diferentes para la sustitución de comandos,

FOO=$(echo bar) 

y

FOO=`echo bar` 

Por lo que yo sé, se define el primer método en Bash, mientras que el segundo se define en sh.

Considere el siguiente uso de sustitución de comando en un script sh.

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

¿Eso caen bajo la definición de bashism?

bash, es decir, no características definidas por POSIX (no va a funcionar en el tablero, o /bin/sh general).

+0

Existen 2 buenas razones para usar siempre la versión más moderna (y, a mi juicio, correcta). $() es casi infinitamente más legible que los backticks, y $ ($()) es anidable, lo cual es una gran ventaja en ocasiones. En la actualidad, no hay una buena razón para usar los apoyos. –

Respuesta

10

Es lo mismo. Así que no, no es un bashismo ni está relacionado solo con bash.

sustitución de comandos
sustitución de comandos permite la salida de un comando a ser sustituido en lugar del propio nombre del comando. sustitución de orden se produce cuando está encerrado el comando de la siguiente manera:

$(command) 

o ('versión '' backquoted'):

`command` 

El shell expande la sustitución de orden mediante la ejecución de comandos en un entorno de subcapa y la sustitución la sustitución del comando con la salida estándar del comando, eliminando secuencias de una o más líneas nuevas al final de la sustitución. (Saltos de línea Embedded antes del final de la salida no se eliminan, sin embargo, durante la división de campos, pueden ser traducidos en espacios, en función del valor de IFS y citando que está en vigor.)


recursos:

+0

Aún más autoritario, aquí hay un enlace a la especificación Open Group Base/IEEE 1003: http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03 –

9

En realidad, la sintaxis de sustitución de comando $( ... ) está definida por POSIX, aunque no forma parte del anterior estándar SVIDsh. Así que mientras no te importe correr en sistemas pre-POSIX, debería estar bien.

Cuestiones relacionadas