Linux: commande set pour les variables locales

9

J'essaie de comprendre les variables locales / d'environnement et d'exporter / définir des commandes.

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

Veuillez expliquer pourquoi echo $FILEMrenvoie une chaîne vide

iJava
la source

Réponses:

21

Vous confondez bashavec csh.

Dans bashcomme dans toute Bourne shell-like, setest la commande de réglage des options (paramètres de configuration shell comme -f, -C, -o noclobber...) et des paramètres de position ( $1, $2...).

set FILEM="razrax"

Définit $1sur FILEM=razrax.

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

La syntaxe pour l'affectation des variables dans les shells de type Bourne est:

VAR=value

(aucun espace autorisé de chaque côté de =).

kshet certains autres shells de type Bourne (mksh, pdksh, zsh) peuvent également affecter des variables de tableau avec setcependant:

set -A array value1 value2

zsh, bash, yashEt les versions plus récentes d' kshutiliser cette syntaxe à la place:

array=(value1 value2)

En revanche, dans cshou tcsh, la syntaxe est:

set VAR = value
set array = (value1 value2)

(espaces autour en =option).

Dans rc/ escoquilles:

VAR = value
array = (value1 value2)

(espaces autour en =option).

Stéphane Chazelas
la source
Merci pour la bonne réponse. La seule chose que je ne comprends pas, c'est quelle est la différence entre les options benweet et les variables locales "set is the command to set options"?
iJava
@iJava, set -Cdéfinit l' -Coption (identique à set -o noclobber). set fooattribue fooà $1(et $#est 1, ( $2, ne $3sont pas définis s'ils sont définis précédemment)). Consultez le manuel de votre coque pour plus de détails.
Stéphane Chazelas
1
Je ne comprends pas quelles sont les options. Ces options sont-elles envoyées à des programmes comme main (arguments String [])? Ou quoi? Où sont-ils utilisés?
iJava
1
@iJava, ce sont des paramètres qui affectent le comportement du shell. Encore une fois, RTFM
Stéphane Chazelas