【发布时间】:2021-11-25 21:50:39
【问题描述】:
我正在编辑别人的.sh,我遇到了这一行
if [ "$ACTION" = "install" -o \( "$ACTION" = "start" -a -z "$APPS" \) ]
我的理解:
-
"$ACTION" = "install"正在检查脚本的操作是否是安装 -
-o是 OR 运算符 -
"$ACTION" = "start"正在检查脚本是否正在启动另一个程序 -
-a是 AND 运算符 -
-z "$APPS"正在检查 $APPS 是否为空字符串
我不知道\( "$ACTION" = "start" -a -z "$APPS" \) 是什么意思。反斜杠括号 (\( <action> \)) 是开始/结束注释吗?我看了here,这不是我所期望的正常条件分组。
编辑:为了帮助代表我的想法,这是大多数其他编程语言中的等价物。因为我对 bash 还很陌生,所以开放式 || 对我来说并不奇怪。
if (ACTION == 'install' || /* ACTION == 'start' && APPS == '' */)
【问题讨论】:
-
对表达式进行分组,就像用其他编程语言编写数学表达式一样。
-
在这种情况下,它是通过转义
(和)字符来对内部表达式进行分组,这可能意味着没有转义序列的其他内容。 -
@Barmar 但是这如何解释反斜杠?
-
反斜杠是转义字符,以防止它被视为启动子shell。你也可以写
'(' -
[使用(进行分组。 shell 使用(来启动一个子shell。\(将(从 shell 中转义,以便[可以看到它,因此 shell 不会抛出错误:[ \( x \) ] && echo ok; [ ( x ) ] && echo oops
标签: bash escaping parentheses