Bash for loop dengan rentang {# .. #}

17

{# .. #} menghasilkan urutan angka atau karakter, mirip dengan range () dalam Python. Jika saya menjalankan perintah echo {1..5}di baris perintah yang saya miliki:

1 2 3 4 5

Sebaliknya skrip bash berikut tidak berfungsi seperti yang diharapkan.

for i in {1..3};
do
    echo "Iteration $i"
done

akan dicetak:

Iteration {1..3}

Mengapa?
* Saya dapat menggunakan seqtetapi saya membacanya kedaluwarsa ( http://www.cyberciti.biz/faq/bash-for-loop/ )

Goyang0
sumber
Kesalahan ini terjadi jika skrip dieksekusi oleh perintah "sh" (coba gunakan "bash").
Kocok0

Jawaban:

22

Saya sudah mencoba kode Anda (salin tempel ke terminal) dan hasilnya berbeda dengan yang Anda posting:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

Saya menggunakan Linux Mint 12 Lisa (berasal dari Ubuntu) dengan bash versi 4.2.10 (1) -release

zipizap
sumber
2
Kamu benar! Saya pikir sh dan bash adalah hal yang sama ..
Shake0
1
tidak, bash dan sh sangat berbeda ... bash lebih mampu daripada sh, itu dibuat di pundak sh :) walaupun mereka berdua memiliki tingkat kompatibilitas yang baik, mereka juga memiliki perbedaan
zipizap
perhatikan bahwa Anda dapat melakukan daftar bersarang seperti untuk var di {{i..j}, {l..m}}; lakukan echo $ var; dilakukan jika Anda memerlukan urutan tidak beraturan seperti 1 2 3 7 8 9
brown.2179
Perhatikan bahwa pada beberapa distro /bin/shIS sebenarnya menunjuk ke bash, pada Debian dan Ubuntu biasanya menunjuk ke /bin/dashyang sebagian besar sesuai dengan POSIX tetapi tidak mendukung semua sintaksis yang sama seperti Bash.
dragon788