Cách sử dụng thay thế tham số trong mẫu hình cầu (zsh)


8

Tôi muốn xử lý một loạt các tệp kết thúc bằng một số hậu tố, vì vậy tôi đã viết tập lệnh zsh sau nhưng nó không hoạt động.

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

Tại sao nó không hoạt động? Làm thế nào tôi có thể kết hợp thay thế tham số và mô hình toàn cầu?

Câu trả lời:


10

Nó không hoạt động bởi vì trong zsh, Globing không được thực hiện theo mặc định khi mở rộng biến. Đó là lý do tại sao zshbạn có thể làm:

rm -- $file

Trong khi trong các shell khác, bạn cần:

rm -- "$file"

Nếu bạn muốn toàn cầu hóa, bạn cần yêu cầu một cách rõ ràng như trong:

rm -- $~file_pattern

Trong trường hợp của bạn:

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

(lưu ý rằng theo quy ước, chúng ta có xu hướng sử dụng tên biến chữ hoa cho các biến môi trường)

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.