在bash中完成noob。试图编辑现有脚本。我用谷歌搜索过像“Bash操作符”这样的东西,我找不到这个。
以下是片段:
if [ "${activ_con}" -a ! "${activ_vpn}" ];
then
nmcli con up id "${VPN_CONNECTION_NAME}"
fi
我只想知道“-a!”有点干嘛谢谢。 (像往常一样,我可能会在接下来的几分钟内找到它......回到谷歌!)
答案 0 :(得分:4)
这意味着“和”。
来自test的手册页:
expression1 -a expression2
True if both expression1 and expression2 are true.
括号是test
的同义词。
答案 1 :(得分:1)
它(-a
)是'和'运营商,-o
是'或'操作
另一种方法是使用:
if [ -n "${activ_con}" ] && [ -z "${activ_vpn}" ]
then
nmcli con up if "${VPN_CONNECTION_NAME}"
fi
这明确地测试"${activ_con}"
的非零长度和"${active_vpn}"
的零长度。这更接近于Autoconf shell样式规则推荐的样式(但他们根本不使用[
进行测试,因为方括号是一个元字符。一些旧的实现(在20世纪80年代和90年代初期,也许)有问题误解了test
命令的操作数,所以给出的建议避免使用-a
和-o
,因为这些是导致混淆的选项。
test
的POSIX规范(和[
是test
的同义词;在许多系统上,还有一个命令/bin/[
,它是{/bin/test
的链接1}},但shell通常使用test
的内置实现)明确指定-a
用作连接意义'和'。 (请注意POSIX站点上test
页面的基本原理部分。)
Conditional Expressions的GNU bash
规范未将-a
列为连词,也不列出-o
。这很有趣。
答案 2 :(得分:0)
-a和-o是所谓的复合语句。 -a与逻辑“&&”相同运算符和-o与逻辑“||”相同运营商。这是区别:
if [conditionA -o conditionB]
与之相比:
if [conditionA] || [conditionB]
-a和&&。
的情况相同