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á azshift
alkalmazást, csak azonos kimenetet eredményezne.