Apa tujuan dari do kata kunci di Bash for sintaks lingkaran? Bagi saya, itu terasa berlebihan.
for i in `seq 1 2`; do echo "hi"; done
Mengapa sintaksnya tidak seperti ini?
for i in `seq 1 2`; echo "hi"; done
Saya yakin ya mengisi sebuah tujuan. Saya hanya ingin belajar.
Jawaban yang Diterima:
Perhatikan bahwa sintaks tersebut diwarisi dari shell Bourne.
Setelah nama variabel, Anda dapat memiliki in agar daftar elemen diberikan secara eksplisit, atau do , untuk mengulang parameter posisi.
for i in 1 2 3
do
echo "$i"
done
Atau
set 1 2 3
for i do
echo "$i"
done
Memiliki do dalam kedua kasus (bahkan jika itu tidak sepenuhnya diperlukan dalam yang pertama) membuat sintaks yang lebih konsisten. Ini juga konsisten dengan while /until loop di mana do diperlukan.
while
cmd1
cmd2
do
cmd3
cmd4
done
Anda memerlukan do untuk memberitahu di mana daftar kondisi perintah berakhir.
Perhatikan bahwa shell Bourne tidak mendukung for i; do . Sintaks itu juga bukan POSIX hingga standar edisi 2016 (for i do selalu POSIX; lihat bug grup Austin terkait).
zsh memiliki beberapa bentuk singkatan seperti:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
Atau dukungan untuk lebih dari satu variabel:
for i j (1 a 2 b) echo $i $j
(meskipun Anda tidak dapat menggunakan in atau do sebagai nama variabel sebagai pengganti j di atas).
Meskipun jarang didokumentasikan, kebanyakan shell mirip Bourne (Bourne, ksh, bash, zsh, bukan ash atau yash ) juga mendukung:
for i in 1 2 3; { echo "$i";}
Cangkang Bourne, ksh dan zsh (tetapi bukan bash ) juga mendukung:
for i { echo "$i"; }
Sementara bash , ksh dan zsh (tetapi bukan shell Bourne) mendukung:
for i; { echo "$i"; }
Semua (Bourne, bash , ksh , zsh ) dukungan:
for i
{ echo "$i";}
ksh93 , bash , zsh dukungan:
for ((i=1;i<=3;i++)) { echo "$i"; }