set
est un shell intégré , utilisé pour définir et désactiver les options de shell et les paramètres de position.
Sans arguments, set
affichera toutes les variables shell (à la fois les variables d'environnement et les variables de la session en cours) triées dans les paramètres régionaux actuels .
Vous pouvez également lire la documentation bash .
Il y a quelques mises en garde.
set "$var"
attribuera une var
valeur à $1
. Si vous $var
commencez par -
ou +
, le $var
contenu a été traité comme des séquences d'options de shell. Si elles $var
contiennent des options non valides, la plupart des shells POSIX imprimeront l'erreur. yash
et zsh
dans sh
, l' ksh
émulation imprime non seulement l'erreur, mais définit également des options valides. Lorsque vous yash
arrêtez de définir des options sur la première option non valide, vous zsh
les affecterez toutes. Dans yash
:
var=-fxd; set "$var"
f
et x
présentera dans $-
, tout en:
var=fdx; set "$var"
uniquement f
présent en $-
. Dans les deux cas, f
et x
présentera $-
avec zsh
in sh
et ksh
émulation.
Pour vous protéger de cette situation, vous pouvez passer --
comme premier argument pour définir le paramètre positionnel même s'il commence par -
ou +
:
var=-fdx; set -- "$var"
attribuera $var
à $1
, quel que soit son contenu.
set --
sans aucun autre argument annulera tous les paramètres de position.
Si le premier argument est -
, le comportement n'est pas spécifié. Tous les shells POSIX connus seront désactivés x
et les v
options (sauf posh
), et assigneront quoi que ce soit après -
aux paramètres de position:
set -xv - -f
assignera -f
à $1
. set -
n'a pas non plus effacé les paramètres de position. Schily osh se comporte aussi comme ça. Heirloom sh ne désélectionne pas v
et les x
options.
La seule exception du shell POSIX est yash
, qui traite -
comme le premier paramètre positionnel:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schily sh ne fait même rien s'il est -
présent dans les arguments:
$ schily-sh -c 'set -v - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
<blank line>
s
$ schily-sh -c 'set -v -- -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
-f
vs