czy polecenie bash `shift` zmienia liczbę argumentów` $ # `

Kiedy używam polecenia bash shift, czy to zmienia liczbę argumentów w $#?

Notatka od autora: Kiedy miałem to pytanie, nie znalazłem go (jeszcze) w tej społeczności. Dlatego po prostu spróbowałem i otrzymałem odpowiedź. Ponieważ pomyślałem, że może to pomóc innym, opublikowałem to, czego się tutaj nauczyłem, jako pytanie, na które można odpowiedzieć samodzielnie .

Odpowiedź

Tak, jest to wyraźnie wymagane w standardzie :

shift [n] Parametry pozycyjne należy przesunąć. Parametrowi pozycyjnemu 1 należy przypisać wartość parametru (1 + n), […] , a parametr „#” jest aktualizowany w celu odzwierciedlenia nowej liczby parametrów pozycyjnych Parametry.

Rozważmy następujący skrypt:

#!/usr/bin/env bash echo "$#" shift echo "$#" 

Nazywając to jak script-file first second third wypisze 3, a następnie 2.

Oznacza to, że możemy rzeczy takie jak:

#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done 

… które wypisują argumenty jeden po drugim w osobnym wierszu.

Komentarze

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *