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`
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`
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.
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.
Usando `` `es la sintaxis histórica, POSIX ha adoptado la sintaxis` $ (...) ahora estándar. Ver Section 2.6.3
Interesante. Siempre pensé que la sintaxis de $() era pura adición bash (una muy buena, aunque). –
Lo vi por primera vez en ksh, en 1992-o-so, antes de usar bash ni siquiera una vez. – Vatine
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
@theman: gracias por el "perspicaz" comentario. –
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