相关疑难解决方法(0)

测试一个glob是否在bash中有任何匹配

如果我想检查是否存在单个文件,我可以使用test -e filename或测试它[ -e filename ].

假设我有一个glob,我想知道是否存在名称与glob匹配的文件.glob可以匹配0个文件(在这种情况下我不需要做任何事情),或者它可以匹配1个或多个文件(在这种情况下我需要做一些事情).如何测试glob是否有匹配?(我不关心有多少匹配,如果我能用一个if语句而没有循环(仅仅因为我发现最可读)这样做是最好的.

(test -e glob*如果glob匹配多个文件,则失败.)

bash glob

213
推荐指数
7
解决办法
4万
查看次数

有没有一种简单的方法可以为一个glob设置nullglob

在bash中,如果你这样做:

mkdir /tmp/empty
array=(/tmp/empty/*)
Run Code Online (Sandbox Code Playgroud)

你发现array现在有一个元素"/tmp/empty/*",而不是你想要的零.值得庆幸的是,可以使用打开nullglob shell选项来避免这种情况shopt -s nullglob

但是nullglob是全局的,当编辑现有的shell脚本时,可能会破坏一些东西(例如,是否有人检查退出代码ls foo*以检查是否存在以"foo"开头的文件?).因此,理想情况下,我只想在小范围内启用它 - 理想情况下,一个文件名扩展.您可以使用它再次关闭shopt -u nullglob但当然只有在之前禁用它时:

old_nullglob=$(shopt -p | grep 'nullglob$')
shopt -s nullglob
array=(/tmp/empty/*)
eval "$old_nullglob"
unset -v old_nullglob
Run Code Online (Sandbox Code Playgroud)

让我觉得必须有一个更好的方法.明显的"把它放在子shell中"不起作用,因为变量赋值与子shell一起消失.除了等待Austin组导入ksh93语法之外,还有吗?

bash glob shopt

21
推荐指数
3
解决办法
7142
查看次数

标签 统计

bash ×2

glob ×2

shopt ×1