set
set je velmi komplikovaný builtin (dělá mnoho věcí). Spustíme-li jej bez
argumentů, vypíše seznam všech proměnných s hodnotami a funkcí. Jinak set umí
zapínat a vypínat některé vlastnosti shellu a nastavovat poziční argumenty.
set -o vlastnost # zapnuti
set +o vlastnost # vypnuti
#pripadne zkracene
set -zkratka # zapnuti
set +zkratka # vypnuti
vlastnost nahradíme jménem vlastnosti, zkratka je jednopísmenná zkratka
vlastnosti. Tabulku všech vlastností (se jménem, zkratkou a funkcí) lze nalézt
v dokumentaci a literatuře. Seznam nastavených vlastností je uložen v proměnné
- (zobrazit tedy lze echo ${-}).1
Jako příklad uvedeme vlastnost xtrace (zkratka x), která je defaultně vypnutá.
Po zapnutí shell zobrazí (spolu s promptem PS4) přečtené části skriptu, po
přečtení a po expanzi.
set -x
IFS=:
for dir in ${PATH}
do
echo -n ${dir}
echo " $(ls ${dir} | wc -l)"
done | sort -r -k 2
vede k
+ IFS=:
+ sort -r -k 2
+ for dir in ${PATH}
+ echo -n /usr/local/bin
++ wc -l
++ ls /usr/local/bin
+ echo ' 11'
+ for dir in ${PATH}
+ echo -n /usr/bin
++ wc -l
++ ls /usr/bin
+ echo ' 2886'
+ for dir in ${PATH}
+ echo -n /bin
++ wc -l
++ ls /bin
+ echo ' 166'
+ for dir in ${PATH}
+ echo -n /usr/bin/X11
++ wc -l
++ ls /usr/bin/X11
+ echo ' 2886'
+ for dir in ${PATH}
+ echo -n /usr/games
++ wc -l
++ ls /usr/games
+ echo ' 1'
/usr/bin/X11 2886
/usr/bin 2886
/bin 166
/usr/local/bin 11
/usr/games 1
(Čtenář vypozoruje, že zapnuté vlastnosti jsou předány do podshellu a tak
příkazy v podshellu pozná podle dvou +. Lze vypozorovat i něco o pořadí ve
vztahu k přesměrování.)
Pomocí
set -- arg1 arg2 .. argn
jsou pozičním proměnným 1, 2, …, až n (pro vstupní argumenty
skriptu/funkce) nastaveny hodnoty arg1 až argn a proměnné # je nastavena
hodnota n. Funguje i pro argumenty začínající znakem -.2