1

完成 bash 中的菜鸟。尝试编辑现有脚本。我在 Google 上搜索过“Bash 运算符”之类的东西,但找不到这个。

这是片段:

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

我只想知道什么是“-a!” 位正在做。谢谢。(和往常一样,我可能会在接下来的几分钟内找到它……回到 GOogle!)

4

3 回答 3

4

它的意思是“和”。

从测试手册页:

 expression1 -a expression2
               True if both expression1 and expression2 are true.

括号是 的同义词test

于 2013-11-09T20:31:04.690 回答
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 样式规则推荐的样式(但它们根本不[用于测试,因为方括号是元字符。一些旧的实现(可能在 1980 年代和 1990 年代初期)存在误解操作数的问题到test命令,所以给出的建议避免使用-aand-o因为这些是导致混淆的选项。

POSIX 规范test(and[是 的同义词test;在许多系统上,还有一个命令/bin/[是指向 的链接/bin/test,但 shell 通常使用 的内置实现test)明确指定-a用作连接含义“和” . test(请注意POSIX 网站上页面的基本原理部分。)

条件表达式的 GNUbash规范没有将其列为连接词,也根本没有列出。那很有意思。-a-o

于 2013-11-09T20:31:05.610 回答
0

-a 和 -o 是所谓的复合语句。-a 与逻辑“&&”运算符相同,-o 与逻辑“||”相同 操作员。这是区别:

if [conditionA -o conditionB] 

相比:

if [conditionA] || [conditionB]

-a 和 && 的情况相同。

于 2013-11-09T21:39:18.483 回答