如果 - 如果没有提供任何内容,则 BASH



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

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

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

if [ -e ]

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

我最近学会了这个技巧:

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过程实现了相同的效果。

你的行是正确的

if [ -n "`find /directory -type f -name '*.filetype'`" ] ;

-n非空字符串的测试。

如注释中所述,不推荐使用反引号语法,取而代之的是$()语法。

相关内容

  • 没有找到相关文章

最新更新