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.