Linux: ustaw polecenie dla zmiennych lokalnych

9

Próbuję zrozumieć zmienne lokalne / środowiskowe i polecenia eksportowania / ustawiania.

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

Proszę wyjaśnić, dlaczego echo $FILEMzwraca pusty ciąg

iJava
źródło

Odpowiedzi:

21

Mylisz się bashz csh.

W bashpodobny w jakikolwiek podobny Bourne shell, setjest polecenie do ustawionych opcji (ustawienia konfiguracyjne shell podoba -f, -C, -o noclobber...) i parametrów pozycyjnych ( $1, $2...).

set FILEM="razrax"

Ustawia $1na FILEM=razrax.

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

Składnia przypisywania zmiennych w powłokach podobnych do Bourne'a jest następująca:

VAR=value

(brak miejsca po obu stronach =).

kshi niektóre inne powłoki podobne do Bourne'a (mksh, pdksh, zsh) mogą również przypisywać zmienne tablicowe za pomocą set:

set -A array value1 value2

zsh, bash, yashI nowsze wersje kshużycia tej składni zamiast:

array=(value1 value2)

Natomiast w cshlub tcshskładnia jest następująca:

set VAR = value
set array = (value1 value2)

(spacje wokół =opcjonalne).

W rc/ esshells:

VAR = value
array = (value1 value2)

(spacje wokół =opcjonalne).

Stéphane Chazelas
źródło
Dziękuję za miłą odpowiedź. Jedyne, czego nie rozumiem, to jaka jest różnica między opcjami i zmiennymi lokalnymi „set to polecenie, aby ustawić opcje”?
iJava
@iJava, set -Custawia -Copcję (tak samo jak set -o noclobber). set fooprzypisuje foodo $1(i $#jest 1 ( $2, $3jest pusta, jeżeli określone wcześniej)). Szczegółowe informacje znajdziesz w instrukcji powłoki.
Stéphane Chazelas
1
Nie rozumiem, jakie są opcje. Czy te opcje są wysyłane do programów takich jak main (Argumenty String [])? Albo co? Gdzie są używane?
iJava
1
@iJava, są to ustawienia, które wpływają na zachowanie powłoki. Ponownie, RTFM
Stéphane Chazelas