问题“测试 glob 在 bash 中是否有任何匹配项”,它的答案非常好。
但是,我想知道如何测试 glob 在 bash 中是否只有一个匹配项以及是否存在分配给一个变量。
我该怎么做?
你不需要nullglob。通过一个简单的测试,您可以验证您的 glob 是否扩展到单个条目,或者零个或多个条目:
globexpand=( globexpression )
[[ -e "${globexpand[@]}" ]] && var="$globexpand"
Run Code Online (Sandbox Code Playgroud)
这样做的原因如下:
globexpression匹配多个文件,则测试-e将失败globexpression匹配单个文件,则测试-e将匹配globexpression没有匹配任何文件,则将globexpand把 保存globexpression为单个条目,并导致测试失败-e。所以你不需要任何nullglob或任何特殊的选择。只需确保您在此处正确引用即可处理带有特殊字符的文件名。
另一种方法是使用它来find计算您的 glob 有多少个匹配项:
$ find . -maxdepth 1 -name 'globexpr' -printf c | wc -c
Run Code Online (Sandbox Code Playgroud)
我们使用它printf,这样我们就不会遇到可能包含换行符的有趣文件名的问题。话虽如此,现在就很简单了:
if [[ $(find . -maxdepth 1 -name 'globexpr' -printf c | wc -c) == "1" ]]; then
# do your magic
else
# do some other stuff
fi
Run Code Online (Sandbox Code Playgroud)