BASH如果 - 如果没有提供

时间:2014-01-09 21:30:28

标签: bash shell unix makefile

我只是在存在某种文件类型时尝试执行任务 - 所以我有这个

if [ -e  `find /directory -type f -name "*.filetype" | head -1`];
      then ...

这总是评估为真(即使没有这样的文件类型存在 - 我最终意识到这一点:

if [ -e ]

评估为真(即如果没有给出 - 当我的条件没有找到文件类型时会发生这种情况) - 有没有人知道我应该做什么才能得到我需要的东西?

2 个答案:

答案 0 :(得分:3)

我最近学会了这种技术:

if [[ $(find /directory -type f -name "*.filetype" 2>/dev/null) ]]; then
    ...
fi
  • 我们将stderr重定向到/dev/null以隐藏任何错误消息
  • 如果文件符合两个条件,则find的输出将为非空白,否则为空白。
  • 如果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测试非空字符串。

正如评论中所述,不推荐使用反引号语法来支持$()语法。