shell – ¿Dónde no está disponible "export var = value"?

Pregunta:

He detectado, probablemente en Usenet a mediados de la década de 1990 (!), Que la construcción

export var=value

es un basismo, y que la expresión portátil es

var=value
export var

He estado defendiendo esto durante años, pero recientemente, alguien me desafió al respecto y realmente no puedo encontrar ninguna documentación que respalde lo que solía ser una sólida creencia mía.

Buscar en Google "export: command not found" no parece mostrar ningún caso en el que alguien haya tenido este problema, por lo que incluso si es genuino, supongo que no es muy común.

(Los resultados que recibo parecen ser novatos que copian / pegan puntuación y terminan con 'export: command not found o algo así, o tratando de usar export con sudo ; y usuarios novatos de csh que intentan usar la sintaxis de shell Bourne).

Ciertamente puedo decir que funciona en OS X y en varias distribuciones de Linux, incluidas aquellas en las que sh es dash .

sh$ export var=value
sh$ echo "$var"
value
sh$ sh -c 'echo "$var"'  # see that it really is exported
value

En el mundo actual, ¿es seguro decir que export var=value es seguro de usar?

Me gustaría entender cuáles son las consecuencias. Si no es portátil a v7 "Bourne classic", eso es poco más que trivia. Si hay sistemas de producción en los que el shell realmente no puede hacer frente a esta sintaxis, sería útil saberlo.

Respuesta:

No es un bashismo sino una sintaxis compatible con POSIX. En realidad, comenzó como un kshismo hace bastante tiempo y luego fue adoptado por casi todos los shells basados ​​en sintaxis de Bourne. La única excepción notoria es /bin/sh en Solaris 10 y anteriores, que se adhiere a la sintaxis del shell Bourne heredado. Con suerte, Solaris 11 usa un shell compatible con POSIX como /bin/sh .

Por cierto, la export ya era un comando incorporado en el shell Bourne heredado, por lo que buscar en Google export: command not found fue engañoso.

Aquí está el comportamiento heredado del shell Bourne cuando la export se combina con una afectación:

$ export var=22
var=22: is not an identifier

Para los nostálgicos, el código fuente de este shell Bourne original está disponible y se puede compilar para la mayoría de las distribuciones Unix y Linux.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım