Bash wildcard untuk mencocokkan dengan tepat n karakter

8

Apakah ada wildcard di bash untuk mencocokkan dengan tepat 5 karakter, memperpendek pola seperti ?????

Theo
sumber

Jawaban:

9

Belum.

Dengan extglobopsi ini, bashtambahkan beberapa kshoperator globbing yang diperluas tetapi bukan operator {x,y}(pattern).

Di ksh93, Anda menggunakan:

{5}(?)

Dengan zshdengan extendedglobpilihan:

?(#c5)

(Anda akan melihat tidak ada yang lebih pendek dari pada ?????).

Di bash, Anda bisa melakukan:

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

meskipun itu hampir tidak perbaikan dan bergantung pada $IFStidak mengandung ?.

Stéphane Chazelas
sumber
Apakah ada di antaranya yang memungkinkan menggunakan variabel untuk 5?
Acak832
@ Random832, ya semua kecuali yang ke-3 dengan bash(yang itu juga akan bekerja dengan ksh93 atau zsh di emulasi sh / ksh). Dengan bash, Anda bisa menggunakannya $(seq "$n" | tr -cd '\n' | tr '\n' '?').
Stéphane Chazelas
Atau $(yes '?' | tr -cd '?' | head -c $n)- ini menyenangkan. Juga, tidak bisakah Anda menghapus ketergantungan $ IFS dengan meletakkannya di "tanda kutip"?
Random832
@ Random832, tidak. Kali ini (dan itu mungkin satu-satunya saat Anda ingin melakukan itu), Anda ingin menggunakan split+globoperator (membiarkan ekspansi tidak dikuotasikan) tetapi hanya globbagian (Anda ingin ?????pola itu diperluas, yang tidak akan terjadi jika Anda mengutip $(...)). Perhatikan bahwa Anda menggunakan split+globoperator itu dengan tanda kutip Anda $nyang menambahkan persyaratan lain yang $IFStidak boleh mengandung digit. Yang Anda bisa dan harus kutip.
Stéphane Chazelas