Hay dos sintaxis para la sustitución de comandos:con paréntesis de dólares y con acentos graves.
Ejecutar top -p $(pidof init)
y top -p `pidof init`
da la misma salida. ¿Son estas dos formas de hacer lo mismo o hay diferencias?
Respuesta aceptada:
Las comillas inversas de estilo antiguo ` `
trate las barras diagonales inversas y el anidamiento un poco diferente. El nuevo estilo $()
interpreta todo lo que hay entre ( )
como un comando.
echo $(uname | $(echo cat))
Linux
echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat
funciona si se escapan las comillas inversas anidadas:
echo `uname | `echo cat``
Linux
barra invertida divertida:
echo $(echo '\')
\
echo `echo '\'`
El nuevo estilo $()
se aplica a todos los shells compatibles con POSIX.
Como señaló mouviciel, el estilo antiguo ` `
podría ser necesario para shells más antiguos.
Aparte del punto de vista técnico, el estilo antiguo ` `
también tiene una desventaja visual:
- Difícil de notar:
I like $(program) better than `program`
- Fácilmente confundido con una comilla simple:
'`'`''`''`'`''`'
- No es tan fácil de escribir (tal vez ni siquiera en el diseño estándar del teclado)
(y SE usa ` `
para mis propios fines, fue un dolor escribir esta respuesta 🙂