Linux: comando set para variáveis ​​locais

9

Estou tentando entender as variáveis ​​locais / de ambiente e exportar / definir comandos.

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

Por favor, explique por que echo $FILEMretorna uma string vazia

iJava
fonte

Respostas:

21

Você está confuso bashcom csh.

Em bashcomo em qualquer Bourne-como o escudo, seté o comando para definir opções (definições de configuração shell gosto -f, -C, -o noclobber...) e parâmetros posicionais ( $1, $2...).

set FILEM="razrax"

Define $1para FILEM=razrax.

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

A sintaxe para atribuição de variável em shells tipo Bourne é:

VAR=value

(não é permitido espaço nos dois lados =).

kshe alguns outros shells tipo Bourne (mksh, pdksh, zsh) também podem atribuir variáveis ​​de matriz com set:

set -A array value1 value2

zsh, bash, yashE versões mais recentes do kshuso essa sintaxe em vez disso:

array=(value1 value2)

Por outro lado, em cshou tcsh, a sintaxe é:

set VAR = value
set array = (value1 value2)

(espaços ao redor =opcional).

Em rc/ esconchas:

VAR = value
array = (value1 value2)

(espaços ao redor =opcional).

Stéphane Chazelas
fonte
Obrigado pela resposta agradável. A única coisa que não entendo é qual é a diferença entre opções benweet e variáveis ​​locais "set é o comando para definir opções"?
IJava 21/04
@iJava, set -Cdefine a -Copção (igual a set -o noclobber). set fooatribui fooa $1(e $#é 1, ( $2, $3não está definido se definido anteriormente)). Verifique o manual do seu shell para obter detalhes.
Stéphane Chazelas
1
Não entendo quais são as opções. Essas opções são enviadas para programas como main (String [] args)? Ou o que? Onde eles são usados?
IJava 21/04
1
@iJava, são configurações que afetam o comportamento do shell. Mais uma vez, RTFM
Stéphane Chazelas