Mengapa 'untuk anytext; lakukan empat kali?

9

Apakah ini bug atau fitur?
Tampaknya terjadi untuk alfanumerik yang tidak dikutip.

Menjalankan GNU bash, versi 4.1.5

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

keluaran:

1
2
3
4
Peter.O
sumber

Jawaban:

14

Itu adalah fitur dari forperintah majemuk, seperti yang dijelaskan oleh help for:

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

Jalankan perintah untuk setiap anggota dalam daftar.

The forLoop mengeksekusi urutan perintah untuk setiap anggota dalam daftar item. Jika in WORDS ...;tidak ada, maka in "$@"diasumsikan. Untuk setiap elemen di WORDS, NAMEdiatur ke elemen itu, dan COMMANDSdieksekusi.

Jadi kode yang Anda kutip mungkin dieksekusi dalam skrip yang dipanggil dengan 4 parameter.

manatwork
sumber
Terima kasih ... Hal yang membuat saya sepenuhnya adalah bahwa hal itu terjadi pada baris perintah .. Saya sebenarnya tidak mencobanya dalam skrip .. Saya pasti telah menggunakan set a b c dbeberapa waktu baru-baru ini. Saya sering menggunakan setcara itu dalam skrip untuk menguji .. Setelah memulai ulang terminal, itu telah berhenti ... (masuk akal sekarang) ..
Peter.O
12

for x; do …adalah jalan pintas untuk for x in "$@"; do …: iterates di atas parameter posisi. Jika loop empat kali, itu berarti Anda memiliki empat parameter posisi ( $1melalui $4).

Gilles 'SANGAT berhenti menjadi jahat'
sumber