Bash wildcard untuk mencocokkan dengan tepat n karakter


8

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

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 ?.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.