Đối với các vòng lặp có lẽ là cách đúng đắn để làm điều đó, nhưng đây là một cách thay thế thú vị:
echo -e {1..10}"\n" |xargs -n1 some_command
Nếu bạn cần số lần lặp làm tham số cho lệnh gọi của mình, hãy sử dụng:
echo -e {1..10}"\n" |xargs -I@ echo now I am running iteration @
Chỉnh sửa: Đã nhận xét đúng rằng giải pháp đưa ra ở trên sẽ hoạt động trơn tru chỉ với các lệnh chạy đơn giản (không có đường ống, v.v.). bạn luôn có thể sử dụng mộtsh -c
để làm những thứ phức tạp hơn, nhưng không đáng.
Một phương pháp khác tôi thường sử dụng là hàm sau:
rep() { s=$1;shift;e=$1;shift; for x in `seq $s $e`; do c=${@//@/$x};sh -c "$c"; done;}
bây giờ bạn có thể gọi nó là:
rep 3 10 echo iteration @
Hai số đầu tiên cho phạm vi. Các @
sẽ nhận được dịch sang số lần lặp. Bây giờ bạn có thể sử dụng điều này với các đường ống quá:
rep 1 10 "ls R@/|wc -l"
với cung cấp cho bạn số lượng tệp trong thư mục R1 .. R10.
let ++n
thay vìn=$((n+1))
(3 ký tự ít hơn).