2009-01-19 38 views
10

La pregunta es tan simple como se indica en el título: ¿Cuál es la diferencia entre las dos expresiones siguientes?

$(...) 
`...` 

Por ejemplo, son las dos variables test1 y test2 diferente?

test1=$(ls) 
test2=`ls` 
+0

@theman: gracias por el "perspicaz" comentario. –

+0

Tenga en cuenta que esto no es solo bash. Esto funciona en ksh y plain old sh (incluso en sh que no es bash disfrazado). – dwc

Respuesta

9

El resultado es el mismo, pero la sintaxis $() más nueva es mucho más clara y fácil de leer. Al menos doblemente cuando intenta anidar. Anidar no es fácil con la sintaxis antigua, pero funciona bien con la nueva.

Compare:

$ echo $(ls $(pwd)) 

frente:

$ echo `ls \`pwd\`` 

Es necesario para escapar de los acentos abiertos incrustados, por lo que es mucho más complicado que tanto el tipo y leer.

De acuerdo con this page, hay al menos una pequeña diferencia en la forma en que tratan las barras invertidas dobles incrustadas.

+2

Anidar * es * posible con la sintaxis de retroceso, solo requiere muchas barras diagonales inversas y rápidamente se vuelve casi ilegible. Especialmente si mezclas otros tipos de citas. – hobbs

+0

@hobbs Gracias, probablemente no me di cuenta. He editado la respuesta. – unwind

5

Es posible que desee leer man bash:

Cuando se utiliza la forma backquote al viejo estilo de sustitución, la barra invertida mantiene su significado literal, excepto cuando va seguida de $, `, o. La primera comilla inversa no precedida por una barra inclinada finaliza la sustitución del comando. Al usar el formulario $ (comando), todos los caracteres entre paréntesis componen el comando; ninguno es tratado especialmente.

Eso se encuentra en la sección "Sustitución de comandos" de la página de manual.

5

Usando `` `es la sintaxis histórica, POSIX ha adoptado la sintaxis` $ (...) ahora estándar. Ver Section 2.6.3

+0

Interesante. Siempre pensé que la sintaxis de $() era pura adición bash (una muy buena, aunque). –

+0

Lo vi por primera vez en ksh, en 1992-o-so, antes de usar bash ni siquiera una vez. – Vatine

+0

Comúnmente se piensa que $() es bash específico, pero eso se debe a que vim no resalta la sintaxis según POSIX, en lugar de usar la sintaxis del intérprete de comandos original que casi todas las personas codifican hoy. Para decirle a vim que use resaltado de sintaxis sensible para scripts de shell, ponga esto en su .vimrc let g: is_posix = 1 – pixelbeat

Cuestiones relacionadas