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"; }