这个bash否定逻辑表达式有什么问题?

时间:2016-11-21 22:21:03

标签: bash

此bash无法解析

if ! [[ mkdir -p "$available"
     && mkdir -p "$enabled"
     && mkdir -p "$logroot"
     && chmod 755 "$available" "$enabled" "$logroot" ]]
then
    echo "Could not make $available, $enabled, and $logroot."
    exit 1;
fi

什么是正确的表格?

2 个答案:

答案 0 :(得分:3)

如果要执行与&&链接的多个命令,则[[ ... ]]不合适。 这似乎是你的意图:

if ! { mkdir -p "$available" &&
     mkdir -p "$enabled" &&
     mkdir -p "$logroot" &&
     chmod 755 "$available" "$enabled" "$logroot"; }
then
    echo "Could not make $available, $enabled, and $logroot."
    exit 1
fi

要回答您的后续问题,相当于if(!(a && !b && c))将是:

if ! (a && ! b && c); then
    # ...
fi

也就是说,!只绑定到它旁边的术语, 你需要在!周围加一个空格。 (谢谢@that-other-guy

或者甚至更好,您可以通过在(...)中使用分组来避免使用{ ...; }子shell(感谢@charles-duffy):

if ! { a && ! b && c; }; then
    # ...
fi

答案 1 :(得分:1)

您可以在BASH中使用它:

if ! { mkdir -p "$available" &&
     mkdir -p "$enabled" &&
     mkdir -p "$logroot" &&
     chmod 755 "$available" "$enabled" "$logroot"; }
then
    echo "Could not make $available, $enabled, and $logroot."
fi
  • &&允许您在换行符中输入下一个命令
  • ! [[ ... ]]取代! { ... }而不是[[ ... ]],{{1}}用于评估conditional expressions