在bash中,-a运算符在做什么?

时间:2013-11-09 20:27:52

标签: bash operators

在bash中完成noob。试图编辑现有脚本。我用谷歌搜索过像“Bash操作符”这样的东西,我找不到这个。

以下是片段:

if [ "${activ_con}" -a ! "${activ_vpn}" ];
then
    nmcli con up id "${VPN_CONNECTION_NAME}"
fi

我只想知道“-a!”有点干嘛谢谢。 (像往常一样,我可能会在接下来的几分钟内找到它......回到谷歌!)

3 个答案:

答案 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和&&。

的情况相同