此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
什么是正确的表格?
答案 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。