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
- … lub przeczytaj standard, który mówi " … parametr ' # ' zostało zaktualizowane w celu odzwierciedlenia nowej liczby parametrów pozycyjnych. "
- Ten ostatni fragment kodu można zastąpić
printf '%s\n' "$@"
lubfor arg do echo "$arg"; done
. Jednak to oczywiście nie wykorzystałobyshift
, a tylko dałoby identyczne wyjście.