setjest wbudowaną powłoką używaną do ustawiania i wyłączania opcji powłoki oraz parametrów pozycyjnych.
Bez argumentów setwypisuje wszystkie zmienne powłoki (zarówno zmienne środowiskowe, jak i zmienne w bieżącej sesji) posortowane według bieżących ustawień regionalnych .
Możesz także przeczytać dokumentację bash .
Jest kilka ostrzeżeń.
set "$var"przypisze varwartość do $1. Jeśli $varzaczynasz od -lub +, wówczas $vartreść była traktowana jako sekwencja opcji powłoki. Jeśli $varzawierają jakiekolwiek nieprawidłowe opcje, większość powłok POSIX wydrukuje błąd. yashi zshw sh, kshemulacja nie tylko drukowanie błędu, ale również ustawienie prawidłowych opcji. Podczas yashustawiania opcji przystanek na pierwszym nieprawidłową opcję, zshprzypisze wszystkie z nich. W yash:
var=-fxd; set "$var"
fi xzaprezentuje się $-, podczas gdy:
var=fdx; set "$var"
tylko fobecny w $-. W obu przypadkach, fi xzaprezentuje się $-z zshw shi kshemulacji.
Aby zabezpieczyć się przed tą sytuacją, można przekazać --jako pierwszy argument, aby ustawić parametr pozycyjny nawet zaczynać się -czy +:
var=-fdx; set -- "$var"
przypisze $vardo $1, niezależnie od jego zawartości.
set -- bez dalszych argumentów spowoduje rozbrojenie wszystkich parametrów pozycyjnych.
Jeśli pierwszym argumentem jest -, zachowanie jest nieokreślone. Wszystkie znane powłoki POSIX zostaną rozbrojone xi vopcje (oprócz posh) i przypiszą wszystko -do parametrów pozycyjnych:
set -xv - -f
przypisze -fdo $1. set -również nie rozbroił parametrów pozycji. Schily osh też tak się zachowuje. Heirloom sh nie rozbroić vi xopcje.
Jedynym wyjątkiem powłoki POSIX jest to yash, który traktuje -jako pierwszy parametr pozycyjny:
$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
Schily nawet nie robi nic, jeśli -występuje w argumentach:
$ 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