Bash cho vòng lặp với phạm vi {# .. #}


17

{# .. #} tạo ra một chuỗi các số hoặc ký tự, tương tự như phạm vi () trong Python. Nếu tôi thực thi lệnh echo {1..5}trong dòng lệnh tôi có:

1 2 3 4 5

Thay vào đó, tập lệnh bash sau không hoạt động như mong đợi.

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

sẽ in:

Iteration {1..3}

Tại sao?
* Tôi có thể sử dụng seqnhưng tôi đọc nó đã lỗi thời ( http://www.cyberciti.biz/faq/bash-for-loop/ )


Lỗi này xảy ra nếu tập lệnh được thực thi bởi lệnh "sh" (thử sử dụng "bash").
Shake0

Câu trả lời:


22

Tôi đã thử mã của bạn (sao chép dán vào thiết bị đầu cuối) và nó tạo ra kết quả khác với những gì bạn đã đăng:

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

Tôi đang sử dụng Linux Mint 12 Lisa (có nguồn gốc từ Ubuntu) với phiên bản bash 4.2.10 (1)


2
Bạn đúng rồi! Tôi nghĩ rằng sh và bash là cùng một thứ ..
Shake0

1
không, bash và sh khá khác nhau ... bash có khả năng hơn sh, nó được tạo ra trên vai của sh :) mặc dù cả hai đều có mức độ tương thích tốt, nhưng chúng cũng có sự khác biệt của nó
zipizap

lưu ý rằng bạn có thể thực hiện các danh sách lồng nhau như cho var trong {{i..j}, {l..m}}; thực hiện echo $ var; thực hiện nếu bạn cần chuỗi không đều như 1 2 3 7 8 9
brown.2179

Lưu ý rằng trên một số bản phân phối /bin/shIS thực sự trỏ vào bash, trên Debian và Ubuntu, nó thường chỉ đến /bin/dashphần lớn tuân thủ POSIX nhưng không hỗ trợ tất cả cú pháp giống như Bash.
dragon788
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.