Bagaimana cara membuat for for di baris perintah?

22

Mari kita ambil yang sederhana for loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done

Titik koma AFAIK dalam skrip bash membuat shell mengeksekusi perintah saat ini secara serempak dan kemudian pergi ke yang berikutnya. Menekan enter benar-benar sama kecuali itu tidak memungkinkan Anda untuk memasukkan perintah berikut, membersihkan buffer segera.

Jadi mengapa shell tidak dapat mengartikan baris berikut

for i in `seq 1 10`; do; echo $i; done

bagaimana cara for loopkerjanya?

pengguna30167
sumber

Jawaban:

16

Sintaks forloop dari bashhalaman buku panduan adalah

for name [ [ in [ word ... ] ] ; ] do list ; done

Tanda titik koma dapat diganti dengan carriage return, seperti yang dicatat di bagian lain dalam bashhalaman buku panduan: "Urutan satu atau lebih baris baru mungkin muncul dalam daftar alih-alih tanda titik koma untuk membatasi perintah."

Namun, kebalikannya tidak benar; Anda tidak dapat secara acak mengganti baris baru dengan titik koma. Skrip multiline Anda dapat dikonversi ke satu baris selama Anda mematuhi aturan sintaksis di atas dan tidak menyisipkan titik koma tambahan setelah do:

for i in `seq 1 10`; do echo $i; done
pengguna4556274
sumber
2
Script terakhir salah, seperti yang ditunjukkan @ dr01, Anda harus menghapus titik koma setelahnya do.
Jake
1
@ jake, ini juga mengatakan Anda harus menghapus titik koma setelahnya do. Selain itu, jawaban ini menjelaskan mengapa Anda harus menghapus titik koma setelah `lakukan '.
user4556274
Bagaimana jika $iperlu menjadi bagian dari nama file? Apakah perlu kutip ganda?
Anonim
18

Tanda titik koma setelahnya doadalah kesalahan dan seharusnya tidak ada di sana.

Berikut ini berfungsi dengan benar:

for i in `seq 1 10`; do echo $i; done 
dr01
sumber