¿Alguna razón para usar o enseñar la sustitución del nuevo desarrollo?

16

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/shlas 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)?
Michael Ekstrand
fuente
77
No, no tiene sentido usar o enseñar `...`. 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).
Stéphane Chazelas
2
Es una cosa Groucho Marx '; {)
goldilocks
2
Espera, ¿los backticks están en desuso? ¿Alguien tiene una referencia canónica que explique por qué? (Los caracteres de sintaxis extraños son muy difíciles de buscar).
MathematicalOrchid
1
Más fácil de escribir. `` - 2 teclas presionadas; $()- shift + 4,9, shift + 0 - 5 pulsaciones de teclas;
Vi.
3
@MathematicalOrchid stackoverflow.com/questions/9405478/… parece bastante bueno. Los backticks son muy difíciles de anidar correctamente, especialmente cuando se trata de citas adicionales.
Michael Ekstrand

Respuestas:

19

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.

maxschlepzig
fuente
18
Yo no caracterizaría "menos pesado en el ojo" como una característica, pero un error ...
jasonwryan
1
Normalmente uso backsticks en casos simples y $ () en casos complejos. Pero muchos guiones están usando los backsticks hasta ahora, y los graduados tenían que poder examinarlos.
peterh - Restablece a Mónica el
@jasonwryan En ese caso, el error no se debe a la brevedad, sino a problemas arbitrarios. Es decir, usar backticks es más fácil a la vista, pero no es por eso que se deprecia. A menos que esté tratando de decir que el azúcar es, por definición, malo y todos deberíamos preferir asm para lo que sea ... En realidad, me gusta la apariencia de $()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.
Ricitos
@goldilocks una vez que envejeces, la legibilidad es mucho más difícil de todos modos: los backticks son prácticamente invisibles en el código a mi edad ...
jasonwryan
3
En un teclado francés, por ejemplo, `es Altrg + E, (difícil de Tipo), mientras que $, (, )no es necesario ningún modificador.
Stéphane Chazelas
5

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? .

jaymmer - Restablece a Monica
fuente
1

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)

Murray Jensen
fuente
1
POSIX no especifica que /bin/shdebe ser conforme. De hecho, Solaris /bin/shes 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 conformado shpara buscarlo en la ruta devuelta por getconf PATH.
maxschlepzig