Los parámetros y otros tipos de expansiones se realizan cuando se lee el comando, antes de ejecutarse.
La primera versión, LANG=Ja_JP bash -c "echo $LANG"
es un comando único. Después de que se analiza como tal, $LANG
se expande en_US
antes de que se ejecute nada. Una vez bash
que termina de procesar la entrada, se bifurca un proceso, se agrega LANG=Ja_JP
al entorno como se esperaba y luego se ejecuta bash -c echo en_US
.
Puede evitar la expansión con comillas simples, es decir, LANG=Ja_JP bash -c 'echo $LANG'
salidas Ja_JP
.
Tenga en cuenta que cuando tiene una asignación variable como parte de un comando, la asignación solo afecta el entorno de ese comando y no el de su shell.
La segunda versión, en LANG=Ja_JP; bash -c "echo $LANG"
realidad , son dos comandos separados ejecutados en secuencia. La primera es una asignación de variable simple sin un comando, por lo que afecta a su shell actual.
Por lo tanto, sus dos fragmentos son fundamentalmente diferentes a pesar de la distinción superficial de uno solo ;
.
Completamente fuera de tema, pero podría recomendar agregar un .UTF-8
al configurar LANG
. No hay una buena razón hoy en día para no usar Unicode en el siglo XXI.