Trong ví dụ này tôi đề cập đến việc mở rộng một chuỗi các số nguyên, nhưng có lẽ (?) Các giới hạn sẽ phù hợp với tất cả các khía cạnh của mở rộng niềng răng .. Quan điểm chung hơn này cũng được tôi quan tâm.
seq
dường như xử lý các chuỗi số nguyên dài hơn nhiều so với việc mở rộng dấu ngoặc {1..n} (ít nhất, đó là trường hợp trong ví dụ này).
ví dụ: 'seq -f @% 12.0f 1 1000000000> / dev / null' .. Điều này mở rộng 1 tỷ khá hạnh phúc trong 14m 04s
Tuy nhiên, echo {1..10000000000} >/dev/null
sự cố rơi vào quên lãng từ CLI trong 'gnome-terminal' và 'konsole' (... tạm biệt phiên cuối của thiết bị đầu cuối!)
Điều tốt nhất tôi có thể có được từ việc mở rộng cú đúp cho một chuỗi số nguyên, là khoảng {1..15000000} .. chỉ 15 triệu.
Đây có phải là một hạn chế của bản mở rộng niềng răng, hoặc về cách echo
xử lý dữ liệu mở rộng? Có vẻ như nguyên nhân là do sử dụng hết RAM có sẵn, nhưng tôi nghĩ nó sẽ sử dụng swap
vùng đó vào thời điểm đó ...
Ngoài ra (btw), chuỗi số nguyên 15000000 này, echo {..}
mất 57.0s; trong khi seq
chỉ mất 12,7 giây ...
bash: xmalloc: ../../../bash/lib/sh/stringvec.c:40: cannot allocate 11280523272 bytes (0 bytes allocated)
. (bash 3.2.39, amd64.) 15000000 gây ra quá nhiều trao đổi, vì vậy tôi đã giết nó. Bạn đang yêu cầu quá nhiều từ bash nghèo.