Xóa dấu chấm phẩy của bạn.
for i in `seq 2`; do echo "$i"; done > out.dat
ĐỀ XUẤT
Cũng theo đề nghị của Fredrik Pihl, cố gắng không sử dụng các chương trình ngoài khi họ không cần thiết, hoặc ít nhất là khi thực tế không:
for i in {1..2}; do echo "$i"; done > out.dat
for ((i = 1; i <= 2; ++i)); do echo "$i"; done > out.dat
for i in 1 2; do echo "$i"; done > out.dat
Ngoài ra, hãy cẩn thận các đầu ra trong words
có thể gây ra việc mở rộng tên đường dẫn.
for A in $(echo '*'); do echo "$A"; done
Sẽ hiển thị tệp của bạn thay vì chỉ là một chữ *
.
$()
cũng được đề xuất như là một cú pháp rõ ràng hơn cho thay thế lệnh trong Bash và POSIX shell so với backticks (`
), và nó hỗ trợ làm tổ.
Các giải pháp sạch hơn cũng cho đọc đầu ra để biến là
while read VAR; do
...
done < <(do something)
Và
read ... < <(do something) ## Could be done on a loop or with readarray.
for A in "${ARRAY[@]}"; do
:
done
Sử dụng printf cũng có thể là một sự thay thế dễ dàng hơn đối với các chức năng dự định với:
printf '%s\n' {1..2} > out.dat
Tại sao 'seq' thay vì' cho i trong {1..2}; làm ... '? –
@FredrikPihl Có nó tốt hơn. Hoặc '((i = 1; i <= 2; ++ i))' hoặc đơn giản là 'trong 1 2' để tương thích. Câu trả lời của tôi chỉ là về vấn đề với chuyển hướng, mặc dù tôi đã cố sửa lỗi: '" $ i "'. – konsolebox
Tôi chỉ nghĩ rằng bạn có thể cập nhật câu trả lời của mình bằng cách thay thế * cách tốt hơn để giải quyết vấn đề mà không cần sử dụng các tệp nhị phân bên ngoài :-) –