Când folosesc comanda bash shift
modifică asta argumentul în $#
?
Notă de la autor: Când am avut această întrebare, nu am găsit-o (încă) în această comunitate. Prin urmare, am încercat pur și simplu și am primit răspunsul meu. Deoarece m-am gândit că ar putea ajuta pe alții, am postat ceea ce am învățat aici ca o întrebare auto-răspuns .
Răspuns
Da este, este necesar în mod explicit în standard :
shift [n]
Parametrii poziționali vor fi schimbați. Parametrul pozițional 1 va primi valoarea parametrului (1 + n), […] și parametrul „#” este actualizat pentru a reflecta noul număr de pozițional parametri.
Luați în considerare acest script:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Se numește ca script-file first second third
va imprima 3
urmat de 2
.
Acest lucru înseamnă că putem face lucruri precum:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… care ar imprima argumentele unul câte unul pe propria linie.
Comentarii
- … sau citiți standardul care spune " … parametrul ' # ' este actualizat pentru a reflecta noul număr de parametri de poziție. "
- Ultimul fragment de cod ar putea fi înlocuit cu
printf '%s\n' "$@"
saufor arg do echo "$arg"; done
. Cu toate acestea, acest lucru nu ar folosi în mod evidentshift
, ci ar produce doar rezultate identice.