Quando uso il comando bash shift
, questo cambia il conteggio degli argomenti in $#
?
Nota dellautore: Quando ho ricevuto questa domanda non lho (ancora) trovata in questa comunità. Quindi lho semplicemente provato e ho ottenuto la mia risposta. Poiché ho pensato che potesse aiutare gli altri, ho pubblicato ciò che ho imparato qui come una domanda con risposta personale .
Risposta
Sì, è esplicitamente richiesto nello standard :
shift [n]
I parametri posizionali devono essere spostati. Al parametro posizionale 1 deve essere assegnato il valore del parametro (1 + n), […] e il parametro “#” viene aggiornato per riflettere il nuovo numero di parametri.
Considera questo script:
#!/usr/bin/env bash echo "$#" shift echo "$#"
Chiamalo come script-file first second third
stamperà 3
seguito da 2
.
Questo significa che possiamo farlo cose come:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… che stamperà gli argomenti uno per uno sulla propria riga.
Commenti
- … oppure leggi lo standard che dice " … il parametro ' # ' viene aggiornato per riflettere il nuovo numero di parametri posizionali. "
- Lultimo snippet di codice potrebbe essere sostituito da
printf '%s\n' "$@"
ofor arg do echo "$arg"; done
. Tuttavia, questo ovviamente non farebbe uso dishift
, ma produrrebbe solo un output identico.