Kun käytän bash shift
-komentoa, muuttaakö tämä argumenttien määrää ryhmässä $#
?
Kirjoittajan huomautus: Kun minulla oli tämä kysymys, en löytänyt sitä (vielä) tästä yhteisöstä. Siksi yritin yksinkertaisesti sitä ja sain vastaukseni. Koska ajattelin, että se voisi auttaa muita, lähetin oppimani tänne nimellä itse vastattu kysymys .
vastaus
Kyllä on, sitä vaaditaan nimenomaisesti standardissa :
shift [n]
Sijaintiparametreja on muutettava. Paikallisparametrille 1 on määritettävä parametrin (1 + n) arvo, […] ja parametri ”#” päivitetään vastaamaan uutta parametrit.
Harkitse tätä komentosarjaa:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Kutsu sitä nimellä script-file first second third
tulostaa 3
ja sen jälkeen 2
.
Tämä tarkoittaa, että voimme tehdä esimerkiksi:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… joka tulostaisi argumentit yksitellen omalle rivilleen.
Kommentit
- … tai lue standardi, jossa lukee " … parametri ' # ' päivitetään vastaamaan uutta sijaintiparametrien määrää. "
- Tämä viimeinen koodinpätkä voidaan korvata
printf '%s\n' "$@"
taifor arg do echo "$arg"; done
. Tämä ei kuitenkaan tietenkään hyödynnäshift
: ää, tuottaa vain identtisen tuotoksen.