Cú pháp {0..10..2}
chỉ được hỗ trợ trong Bash 4.
Đối với Bash 3, sử dụng cú pháp này để thay thế:
$ for ((i=0; i<=10; i+=2)); do echo "Welcome $i times"; done
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times
Bạn có thể xem những gì đang xảy ra trong Bash 3.2 nếu bạn loại bỏ các phần của bước việc mở rộng cú đúp:
bash-3.2$ for i in {0..10..2}; do echo "i=>$i"; done
i=>{0..10..2}
bash-3.2$ for i in {0..10}; do echo "i=>$i"; done
i=>0
i=>1
i=>2
i=>3
i=>4
i=>5
i=>6
i=>7
i=>8
i=>9
i=>10
NHƯNG trên Bash 4, nó hoạt động như bạn mong muốn nó để:
bash-4.3$ for i in {0..10..2}; do echo "i=>$i"; done
i=>0
i=>2
i=>4
i=>6
i=>8
i=>10
Sửa
Như Nathan Wilson một cách chính xác chỉ ra, điều này có lẽ là kết quả của sự lựa chọn Bash braceexpand
là tiêu cực.
Bạn có thể đặt giá trị này với set:
$ echo $SHELLOPTS
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:posix
$ for i in {0..5}; do echo "i=>$i"; done
i=>0
i=>1
i=>2
i=>3
i=>4
i=>5
$ set +B
$ echo $SHELLOPTS
emacs:hashall:histexpand:history:interactive-comments:monitor:posix
$ for i in {0..5}; do echo "i=>$i"; done
i=>{0..5}
thử 'for i in $ (seq 0 2 10)' –
Hw là bạn đang chạy tập lệnh, đoán bạn đang sử dụng sh. Sử dụng bash. – 123
Không, nó cho tôi thấy điều này: Chào mừng 0 lần có hoặc không có sudo , tôi đang sử dụng bash –