Linux: Befehl set für lokale Variablen

9

Ich versuche, lokale / Umgebungsvariablen zu verstehen und Befehle zu exportieren / setzen.

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

Bitte erläutern Sie, warum eine echo $FILEMleere Zeichenfolge zurückgegeben wird

iJava
quelle

Antworten:

21

Sie verwechseln bashmit csh.

In bashwie in jedem Bourne - Shell-like, setwird der Befehl an eingestellten Optionen (Shell Konfigurationseinstellungen , wie -f, -C, -o noclobber...) und Positionsparameter ( $1, $2...).

set FILEM="razrax"

Setzt $1auf FILEM=razrax.

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

Die Syntax für die Variablenzuweisung in Bourne-ähnlichen Shells lautet:

VAR=value

(kein Platz auf beiden Seiten erlaubt =).

kshund einige andere Bourne-ähnliche Shells (mksh, pdksh, zsh) können auch Array-Variablen zuweisen mit set:

set -A array value1 value2

zsh, bash, yashUnd neuere Versionen kshverwenden diese Syntax statt:

array=(value1 value2)

Im Gegensatz dazu lautet die Syntax in cshoder tcsh:

set VAR = value
set array = (value1 value2)

(Leerzeichen um =optional).

In rc/ esMuscheln:

VAR = value
array = (value1 value2)

(Leerzeichen um =optional).

Stéphane Chazelas
quelle
Danke für die nette Antwort. Das einzige, was ich nicht verstehe, ist der Unterschied zwischen benweet-Optionen und lokalen Variablen "set is the command to set options"?
iJava
@iJava, set -Csetzt die -COption (wie set -o noclobber). set fooweist foozu $1(und $#ist 1, ( $2, $3sind nicht gesetzt, wenn zuvor gesetzt)). Weitere Informationen finden Sie im Handbuch Ihrer Shell.
Stéphane Chazelas
1
Ich verstehe nicht, was Optionen sind. Sind dies Optionen, die an Programme wie main (String [] args) gesendet werden? Oder was? Wo werden sie verwendet?
iJava
1
@iJava, dies sind Einstellungen, die das Verhalten der Shell beeinflussen. Wieder RTFM
Stéphane Chazelas