setest un shell intégré , utilisé pour définir et désactiver les options de shell et les paramètres de position.
Sans arguments, setaffichera 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 varvaleur à $1. Si vous $varcommencez par -ou +, le $varcontenu a été traité comme des séquences d'options de shell. Si elles $varcontiennent des options non valides, la plupart des shells POSIX imprimeront l'erreur. yashet zshdans sh, l' kshémulation imprime non seulement l'erreur, mais définit également des options valides. Lorsque vous yasharrêtez de définir des options sur la première option non valide, vous zshles affecterez toutes. Dans yash:
var=-fxd; set "$var"
fet xprésentera dans $-, tout en:
var=fdx; set "$var"
uniquement fprésent en $-. Dans les deux cas, fet xprésentera $-avec zshin shet 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 xet les voptions (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 vet les xoptions.
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