Když použiji příkaz bash shift
, změní to počet argumentů v $#
?
Poznámka od autora: Když jsem měl tuto otázku, nenašel jsem ji (zatím) v této komunitě. Proto jsem to prostě zkusil a dostal odpověď. Protože jsem si myslel, že by to mohlo pomoci ostatním, zveřejnil jsem to, co jsem se zde naučil, jako otázka s odpovědí na sebe .
Odpověď
Ano ano, je to ve standardu výslovně požadováno :
shift [n]
Poziční parametry musí být posunuty. Pozičnímu parametru 1 bude přiřazena hodnota parametru (1 + n), […] a parametr „#“ bude aktualizován tak, aby odrážel nový počet pozičních parametry.
Zvažte tento skript:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Volání jako script-file first second third
vytiskne 3
následovaný 2
.
To znamená, že můžeme věci jako:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… které by tiskly argumenty jeden po druhém na jejich vlastní řádek.
Komentáře
- … nebo si přečtěte standard, který říká " … parametr ' # ' je aktualizován tak, aby odrážel nový počet pozičních parametrů. "
- Tento poslední fragment kódu lze nahradit
printf '%s\n' "$@"
nebofor arg do echo "$arg"; done
. To by však samozřejmě nepoužiloshift
, produkovalo by to jen identický výstup.