Shell-Script
zsh:從模式中排除文件
假設我有以下文件:
|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
我想到了以下命令
print -l foo/*~{type_B*}
將列印除以開頭但不列印的內容之外的****所有內容,而是列印 foo 下的所有內容:
foo
type_B
foo/type_A_1 foo/type_A_2 foo/type_B_1 foo/type_B_2 foo/type_B_xx foo/something_else
我也試過
print -l foo/*~type_B
並得到了同樣的東西。異常萬用字元
~
在 zsh 中是如何工作的?
您需要將目錄包含在異常中:
print -l foo/*~foo/type_A*
或print -l foo/*~{foo/type_A*}
.如果需要,可以用萬用字元替換目錄:
print -l foo/*~*/type_A*
當 EXTENDED_GLOB 打開時, zsh具有
^
glob 運算符。這似乎非常適合您所說的情況:setopt extendedglob print -rl foo/^type_A*
它的意思是“匹配任何東西,除了匹配後面的模式”,但它的效果僅限於斜線之間的模式部分,或者模式的開頭和第一個斜線之間,或者(如本例中)最後一個斜線和模式的結尾。
您可以查看目前啟用的zsh選項:
setopt
並使用以下命令禁用 EXTENDED_GLOB:
unsetopt extendedglob