Amikor a bash shift parancsot használom, megváltoztatja ez az argumentumszámot a $# fájlban?
A szerző megjegyzése: Amikor feltettem ezt a kérdést, még nem találtam meg (ebben a közösségben). Ezért egyszerűen kipróbáltam, és megkaptam a választ. Mivel úgy gondoltam, hogy ez másoknak is segíthet, itt feltettem, amit tanultam önmegválaszolt kérdés .
Válasz
Igen, igen, erre kifejezetten szükség van a szabványban :
shift [n]Az 1. pozíció paraméterhez hozzá kell rendelni az (1 + n), […] paraméter értékét, és a “#” paraméter frissül, hogy tükrözze az új pozíciószámot paraméterek.
Fontolja meg ezt a szkriptet:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Hívás így: script-file first second third kinyomtatja 3, majd 2.
Ez azt jelenti, hogy megtehetjük például:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… amelyek egyesével kinyomtatják az argumentumokat a saját sorukra.
Megjegyzések
- … vagy olvassa el azt a szabványt, amely a következőt mondja: " … a ' # ' frissítésre kerül, hogy tükrözze az új helyzeti paraméterek számát. "
- Ez az utolsó kódrészlet helyettesíthető a következővel:
printf '%s\n' "$@"vagyfor arg do echo "$arg"; done. Ez azonban nyilvánvalóan nem használná azshiftalkalmazást, csak azonos kimenetet eredményezne.