Når jeg bruker bash shift
-kommandoen, endrer det argumentet i $#
?
Merknad fra forfatter: Da jeg hadde dette spørsmålet, fant jeg det ikke (ennå) på dette samfunnet. Derfor prøvde jeg det ganske enkelt og fikk svaret mitt. Fordi jeg trodde det kunne hjelpe andre, la jeg ut det jeg lærte her som et selvsvaret spørsmål .
Svar
Ja er gjør, det kreves eksplisitt i standarden :
shift [n]
Posisjonsparametrene skal forskyves. Posisjonsparameter 1 skal tildeles verdien av parameteren (1 + n), […] og parameteren «#» oppdateres for å gjenspeile det nye antallet posisjoner parametere.
Vurder dette skriptet:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Kaller det som script-file first second third
vil skrive ut 3
etterfulgt av 2
.
Dette betyr at vi kan gjøre ting som:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… som vil skrive ut argumentene en etter en på sin egen linje.
Kommentarer
- … eller les standarden som sier " … parameteren ' # ' er oppdatert for å gjenspeile det nye antallet posisjonsparametere. "
- Det siste kodebiten kan erstattes av
printf '%s\n' "$@"
ellerfor arg do echo "$arg"; done
. Dette vil imidlertid åpenbart ikke gjøre bruk avshift
, men bare gi identisk utdata.