Wanneer ik het bash shift
commando gebruik, verandert dat het aantal argumenten in $#
?
Opmerking van de auteur: Toen ik deze vraag had, vond ik deze (nog) niet op deze community. Daarom heb ik het gewoon geprobeerd en kreeg ik mijn antwoord. Omdat ik dacht dat het anderen zou kunnen helpen, heb ik wat ik hier geleerd heb gepost als een zelfbeantwoorde vraag .
Antwoord
Ja zeker, dit is expliciet vereist in de standaard :
shift [n]
De positionele parameters worden verschoven. Positieparameter 1 krijgt de waarde van parameter (1 + n), […] toegewezen en de parameter # wordt bijgewerkt om het nieuwe aantal positionele parameters.
Beschouw dit script:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Noem het als script-file first second third
zal 3
afdrukken, gevolgd door 2
.
Dit betekent dat we kunnen doen dingen als:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… die de argumenten een voor een op hun eigen regel zouden afdrukken.
Opmerkingen
- … of lees de standaard die zegt " … de parameter ' # ' is bijgewerkt om het nieuwe aantal positionele parameters weer te geven. "
- Dat laatste codefragment zou kunnen worden vervangen door
printf '%s\n' "$@"
offor arg do echo "$arg"; done
. Dit zou echter duidelijk geen gebruik maken vanshift
, alleen identieke uitvoer produceren.