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

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.


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).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.