我只是在存在某种文件类型时尝试执行任务 - 所以我有这个
if [ -e `find /directory -type f -name "*.filetype" | head -1`];
then ...
这总是评估为真(即使没有这样的文件类型存在 - 我最终意识到这一点:
if [ -e ]
评估为真(即如果没有给出 - 当我的条件没有找到文件类型时会发生这种情况) - 有没有人知道我应该做什么才能得到我需要的东西?
答案 0 :(得分:3)
我最近学会了这种技术:
if [[ $(find /directory -type f -name "*.filetype" 2>/dev/null) ]]; then
...
fi
/dev/null
以隐藏任何错误消息find
的输出将为非空白,否则为空白。[[ ... ]]
的计算结果为true或false。之前我使用过不同的版本:
if find /directory -type f -name "*.filetype" 2>/dev/null | grep -q .; then
...
fi
但这不太好,因为它使用额外的grep
进程。第一个解决方案通过单个find
流程实现了相同的目标。
答案 1 :(得分:1)
你的专栏是正确的
if [ -n "`find /directory -type f -name '*.filetype'`" ] ;
-n
测试非空字符串。
正如评论中所述,不推荐使用反引号语法来支持$()
语法。