La recomendación moderna es usar:
$(...)
en lugar de los mayores:
`...`
principalmente para facilitar la lectura y evitar la necesidad de escapar al anidar.
¿Qué shells no son compatibles con el $(...)
formulario? ¿Alguno de ellos sigue en uso hoy en día?
shell
command-substitution
portability
joeytwiddle
fuente
fuente
cmd
han desaprobado los backticks (es decir ) en * shells? y encontrarás la respuesta.sh
que en el entorno adecuado admitirá$(...)
.Respuestas:
El shell Bourne original, csh o tcsh no son compatibles
$()
y requieren la``
sustitución de comandos.El shell Bourne ya no se usa como el shell predeterminado (/ bin / sh) en muchos sistemas operativos basados en UNIX. Sin embargo, los proveedores de sistemas operativos todavía proporcionan estos shells, ya que todavía se usan por razones históricas.
Tanto AIX como HP-UX tienen / bin / sh como un shell compatible con POSIX. Bourne Shell todavía está disponible en AIX como 'bsh' (pero desaprobado en 1995 con AIX 4.1) y HP-UX 11.11 '/ usr / old / bin / sh' (Bourne se eliminó de 11.23). No estoy seguro de cuándo se realizó el cambio, pero fue hace muchos años.
fuente
Solaris 10 y versiones anteriores
/bin/sh
no son compatibles$()
.Todavía está en uso hoy en día porque Solaris 10 todavía está en uso, Sun no quería reemplazarlo con una versión conforme estándar (hasta e incluyendo Solaris 10), y porque la mayoría de las personas consideran
/bin/sh
el shell predeterminado y no saben cómo para ejecutar de forma portátil un script con un shell POSIX conforme .La motivación de Sun para no cambiar
/bin/sh
era evitar romper los scripts de shell existentes que dependen del comportamiento no conforme.fuente
/bin/sh
...