Cara menggunakan substitusi parameter dalam pola glob (zsh)


8

Saya ingin memproses banyak file yang diakhiri dengan beberapa sufiks, jadi saya menulis skrip zsh berikut tetapi tidak berhasil.

EXT=(.jpg .png .gif)
EXT=${(j.|.)EXT}    # EXT becomes '.jpg|.png|.gif'
for f in *($EXT); do     # should become '*(.jpg|.png|.gif)' but failed
    process-one-file $f
done

Mengapa itu tidak berhasil? Bagaimana saya bisa mencampur substitusi parameter dan pola glob?

Jawaban:


10

Ini tidak berfungsi karena di zsh, globbing tidak dilakukan secara default pada ekspansi variabel. Itu sebabnya di dalam zshkamu dapat melakukan:

rm -- $file

Sementara di shell lain, Anda perlu:

rm -- "$file"

Jika Anda ingin membuat globbing, Anda harus memintanya secara eksplisit seperti pada:

rm -- $~file_pattern

Dalam kasus Anda:

for f (*($~EXT)) process-one-file $f

(perhatikan bahwa dengan konvensi, kami cenderung menggunakan nama variabel huruf besar untuk variabel lingkungan)

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.