Linux: comando set para variables locales

9

Estoy tratando de comprender las variables locales / de entorno y los comandos de exportación / configuración.

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

Por favor, explique por qué echo $FILEMdevuelve una cadena vacía

iJava
fuente

Respuestas:

21

Estás confundido bashcon csh.

En bashigual que en cualquier Bourne-como la cáscara, setes el comando para establecer opciones de configuración (configuración de la cáscara como -f, -C, -o noclobber...) y los parámetros posicionales ( $1, $2...).

set FILEM="razrax"

Conjuntos $1a FILEM=razrax.

$ set FILEM="razrax"
$ echo "$1"
FILEM=razrax

La sintaxis para la asignación de variables en shells tipo Bourne es:

VAR=value

(no se permite espacio a ambos lados de =).

kshy algunos otros shells tipo Bourne (mksh, pdksh, zsh) también pueden asignar variables de matriz con set:

set -A array value1 value2

zsh, bash, yashY las nuevas versiones de kshutilizar esta sintaxis en su lugar:

array=(value1 value2)

En contraste, en csho tcsh, la sintaxis es:

set VAR = value
set array = (value1 value2)

(espacios alrededor =opcionales).

En rc/ esconchas:

VAR = value
array = (value1 value2)

(espacios alrededor =opcionales).

Stéphane Chazelas
fuente
Gracias por una buena respuesta Lo único que no entiendo es ¿cuál es la diferencia entre las opciones benweet y las variables locales "set es el comando para establecer opciones"?
iJava
@iJava, set -Cestablece la -Copción (igual que set -o noclobber). set foose asigna fooa $1(y $#es 1, ( $2, no $3se establece si se configuró previamente)). Consulte el manual de su shell para más detalles.
Stéphane Chazelas
1
No entiendo que SON opciones. ¿Son estas opciones que se envían a programas como main (String [] args)? ¿O que? ¿Dónde se usan?
iJava
1
@iJava, son configuraciones que afectan el comportamiento del shell. De nuevo, RTFM
Stéphane Chazelas