Ký tự đại diện Bash để khớp chính xác n ký tự


8

Có một ký tự đại diện trong bash để khớp chính xác 5 ký tự, rút ​​ngắn một mẫu như ?????

Câu trả lời:


9

Chưa.

Với extglobtùy chọn, bashthêm một số kshtoán tử toàn cầu mở rộng nhưng không phải là toán tử {x,y}(pattern).

Trong ksh93, bạn sử dụng:

{5}(?)

Với zshvới extendedglobtùy chọn:

?(#c5)

(bạn sẽ nhận thấy không ai trong số họ ngắn hơn ?????mặc dù).

Trong bash, bạn có thể làm:

$(printf '%.0s?' {1..5})

mặc dù đó hầu như không phải là một cải tiến và dựa vào việc $IFSkhông chứa ?.


Có ai trong số này cho phép sử dụng một biến cho 5 không?
Random832

@ Random832, có tất cả trừ cái thứ 3 với bash(cái đó cũng sẽ hoạt động với ksh93 hoặc zsh trong mô phỏng sh / ksh). Với bash, bạn có thể sử dụng $(seq "$n" | tr -cd '\n' | tr '\n' '?')thay thế.
Stéphane Chazelas

Hoặc $(yes '?' | tr -cd '?' | head -c $n)- đây là niềm vui. Ngoài ra, bạn không thể loại bỏ sự phụ thuộc $ IFS bằng cách đặt nó vào "dấu ngoặc kép"?
Random832

@ Ngẫu nhiên832, không. Lần này (và đó có lẽ là lần duy nhất bạn muốn làm điều đó), bạn muốn sử dụng split+globtoán tử (không mở rộng phần mở rộng) nhưng chỉ globphần (bạn muốn ?????mở rộng mô hình đó, điều đó sẽ không xảy ra nếu bạn trích dẫn $(...)). Lưu ý rằng bạn sử dụng split+globtoán tử đó với trích dẫn của bạn $nmà thêm yêu cầu khác $IFSkhông được chứa chữ số. Đó là một trong những bạn có thể và nên trích dẫn.
Stéphane Chazelas
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.