Når jeg bruger kommandoen bash shift
, ændrer det argumentet i $#
?
Bemærkning fra forfatteren: Da jeg havde dette spørgsmål, fandt jeg det (endnu) ikke på dette samfund. Derfor prøvede jeg det simpelthen og fik mit svar. Fordi jeg troede, det kunne hjælpe andre, sendte jeg det, jeg lærte her, som et selvbesvaret spørgsmål .
Svar
Ja er gør, det kræves eksplicit i standarden :
shift [n]
Positionsparametrene flyttes. Positionsparameter 1 tildeles værdien af parameteren (1 + n), […] og parameteren “#” opdateres for at afspejle det nye antal positionelle parametre.
Overvej dette script:
#!/usr/bin/env bash echo "$#" shift echo "$#"
At kalde det som script-file first second third
udskriver 3
efterfulgt af 2
.
Dette betyder, at vi kan gøre ting som:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… som vil udskrive argumenterne en efter en på deres egen linje.
Kommentarer
- … eller læs standarden der siger " … parameteren ' # ' opdateres til at afspejle det nye antal positionsparametre. "
- Det sidste kodestykke kunne erstattes af
printf '%s\n' "$@"
ellerfor arg do echo "$arg"; done
. Dette vil dog naturligvis ikke gøre brug afshift
, men kun producere identisk output.