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 🙂