Shell-Script
shell glob 中的“或”
我想 ls 文件名中包含子字元串“s1r”、“s2r”、“s3r”或“s19r”的文件。
我快到了!
拙劣的嘗試:
ls *s[123][9?]r*
以上只給了我包含子字元串的文件
s19r
儘管
ls *s[1-3]|[19]r*
返回
-重擊:
$$ 19 $$r*: 找不到命令 ls: * 小號
$$ 1-3 $$: 沒有相應的文件和目錄
也就是說,它不辨識 or | 運算符 - 這很有意義,因為它也用於管道。
如何 ls 包含“s1r”、“s2r”、“s3r”或“s19r”的文件?
使用
ls *s1r* *s2r* *s3r* *s19r*
.如果您關心不存在的文件,您可以設置 nullglob 選項:
nullglob If set, bash allows patterns which match no files (see Pathname Expansion above) to expand to a null string, rather than themselves.
如果您的 shell 不是 bash,則可能有類似的方法。看看它的手冊頁。
你可能想試試這個:
ls *s?([123])r* *s19r*
例如
我有一個包含以下文件的目錄:
% ls | column s10r s12r s14r s16r s18r s1r s2r s4r s6r s8r s11r s13r s15r s17r s19r s23r s3r s5r s7r s9r
使用上面提到的 ls:
% ls *s?([123])r* *s19r* s19r s1r s2r s3r
有關更多詳細資訊,請參閱有關模式匹配的 bash 手冊。