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


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


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