Tengo entendido que la $(...)
sintaxis de sustitución de comandos más moderna se prefiere a la `
sintaxis antigua , debido a una sintaxis de anidamiento y escape más fácil y menos propensa a errores.
Además, parece que la mayoría de /bin/sh
las conchas de estilo moderno admiten el uso $(…)
:
- golpetazo
- ash (y, por lo tanto, BusyBox, la mayoría de Linux incrustado)
- guión
- FreeBSD / bin / sh
Y $(…)
está especificado por IEEE 1003.1.
Entonces tengo 2 preguntas muy relacionadas:
- ¿Hay alguna razón para usar `en un nuevo desarrollo de scripts de shell a menos que conozca un sistema antiguo específico en el que el script necesitará ejecutarse?
- ¿Hay alguna razón para no enseñar a los estudiantes de programación de UNIX a escribir
$(...)
y debatir`
solo como una variante obsoleta que probablemente encontrarán si están leyendo los scripts de shell de otros desarrolladores (y pueden ser necesarios si están trabajando con un sistema realmente antiguo o no estándar) por alguna razón)?
shell
command-substitution
Michael Ekstrand
fuente
fuente
`...`
. Está allí para la portabilidad hacia atrás solo con el shell Bourne (como el shell Bourne tenía^
(igual que|
) para la portabilidad hacia atrás con el shell Thomson). Sin embargo(t)csh
, tenga en cuenta que no tiene$(...)
(pero tampoco tiene mucho sentido usarlos o enseñarlos).$()
- shift + 4,9, shift + 0 - 5 pulsaciones de teclas;Respuestas:
Dado que a menudo se usan ticks de retroceso, tiene sentido enseñar esta construcción sintáctica.
Por supuesto, la
$()
sustitución de comandos de estilo debe enfatizarse como el estilo predeterminado (y la construcción conforme estándar).¿Por qué los back-ticks siguen siendo populares? Debido a que guardan un personaje al escribir, y son posiblemente menos pesados en el ojo.
fuente
$()
mejor, pero los backticks son más fáciles y más BESOS; podría ser una consecuencia pavloviana del OCD de la programación general.`
es Altrg + E, (difícil de Tipo), mientras que$
,(
,)
no es necesario ningún modificador.No los usaría para programar, y enseñar el uso de la sustitución de backtick en scripts de shell como obsoletos está bien (este parece ser el consenso). Sin embargo, no creo que sean intrínsecamente malvados, y (al menos a juzgar por su tutorial promedio de la línea de comandos de Linux) todavía se usan con frecuencia en fragmentos / frases simples donde probablemente no estarán anidados y cosas que usted solo lo vas a hacer una vez.
Ver Sustitución de comandos: ¿backticks o signo de dólar / par adjunto? .
fuente
Evito usar la
$()
construcción porque no es portátil, en el mundo real. Has enumerado cuatro proyectiles: hay muchas más variaciones que eso (¿un orden de magnitud?). Intente ejecutar su script en Solaris / bin / sh y vea cómo le va.Por otro lado, ¿cuándo deja de admitir sistemas antiguos? ¿Nunca puedes progresar a nuevas formas de hacer las cosas? Creo que debes confiar en tu propio juicio, y si puedes ver una ventaja definitiva de la nueva forma sobre la antigua, entonces ve por ella ... esta no es una de ellas (personalmente encuentro las bacticks mucho más claras, no pueden ser confundido con la sustitución de variables de shell, que es una cosa diferente)
fuente
/bin/sh
debe ser conforme. De hecho, Solaris/bin/sh
es muy disconforme, aunque Solaris 9/10 / ... cumple oficialmente con POSIX. El$()
es solo un constructo que no entiende. Pero hay muchos más que no entiende o se interpretan de manera diferente. La forma portátil de obtener un conformadosh
para buscarlo en la ruta devuelta porgetconf PATH
.