Katakanlah saya memiliki file berikut:
|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
Saya pikir perintah berikut
print -l foo/*~{type_B*}
akan mencetak semuanya di bawah foo
kecuali hal-hal yang dimulai dengan type_B
tetapi tidak, sebaliknya ia mencetak semuanya di bawah foo:
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
Saya juga mencoba print -l foo/*~type_B
dan mendapatkan hal yang sama.
Bagaimana cara ~
kerja wildcard pengecualian di zsh?
shell-script
zsh
wildcards
Amelio Vazquez-Reina
sumber
sumber
foo/*~*/type_A*
? Apakah yang kedua*
diperluas ke setiap folder di bawah direktori kerja, atau cukup pintar untuk hanya memperluasfoo
?print *~**/*
di/
direktori), saya berasumsi bahwa itu pertama-tama memperluas pola pertama dan kemudian menghapus semua kecocokan yang cocok dengan pola pengecualian.~
adalah murni tekstual, bagian sebelum~
mengembang seperti biasa, maka bagian setelah strip cocok. @Jofel Tes yang lebih baik adalahprint /**/*~*
: Anda dapat mengamati bahwa itu melintasi seluruh pohon, bahkan jika akhirnya tidak mencetak apa pun.zsh memiliki
^
operator glob ketika EXTENDED_GLOB aktif. Sepertinya sangat cocok untuk situasi yang Anda nyatakan:Ini berarti "cocokkan apa pun, kecuali yang cocok dengan pola berikut", tetapi efeknya terbatas pada bagian dari pola antara garis miring, atau antara awal pola dan garis miring pertama, atau (seperti dalam kasus ini) antara yang terakhir garis miring dan ujung polanya.
Anda dapat melihat opsi zsh yang saat ini diaktifkan dengan:
Dan nonaktifkan EXTENDED_GLOB dengan:
sumber