Perché "per qualsiasi testo; fare quattro volte?


9

È un bug o una funzionalità?
Sembra accadere per alfanumerici non quotati.

Esecuzione di GNU bash, versione 4.1.5

for alpha01234; do echo $((++i)); done

produzione:

1
2
3
4

Risposte:


14

Questa è una caratteristica del forcomando composto, come descritto da help for:

for: for NAME [in WORDS ... ] ; do COMMANDS; done

Eseguire comandi per ciascun membro in un elenco.

Il forciclo esegue una sequenza di comandi per ciascun membro in un elenco di elementi. Se in WORDS ...;non è presente, in "$@"si assume. Per ogni elemento in WORDS, NAMEviene impostato su quell'elemento e COMMANDSvengono eseguiti.

Quindi il codice che hai citato viene probabilmente eseguito in uno script che è stato chiamato con 4 parametri.


Grazie ... La cosa che mi ha lanciato completamente è che è successo alla riga di comando .. In realtà non l'ho provato in uno script .. Devo averlo usato set a b c dda qualche tempo di recente. Lo uso spesso setin uno script per i test. Dopo aver riavviato il terminale, si è fermato ... (ha senso ora) ..
Peter.O

12

for x; do …è una scorciatoia per for x in "$@"; do …: scorre i parametri posizionali. Se esegue quattro cicli, significa che hai quattro parametri posizionali ( $1attraverso $4).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.