Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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


  1. Další vlastnosti lze měnit pomocí shopt. ↩

  2. Znak - je bez použití -- jako prvního argumentu použit jako oddělovač přepínačů pro set a argumentů, které se mají přiřadit pozičním proměnným. ↩