\( 在 bash 脚本中是什么意思
What does \( mean in a bash script
我正在编辑别人的.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> \)
) 是 start/end 评论吗?我查看了 here,这不是我期望的正常条件分组。
编辑:为了帮助表达我的想法,这在大多数其他编程语言中都是等效的。因为我是 bash 的新手,所以开放式 ||
对我来说并不奇怪。
if (ACTION == 'install' || /* ACTION == 'start' && APPS == '' */)
\(
对字符 (
进行了转义,因此它不会被 shell 视为语法,而是作为参数传递给 test
(又名 [
).您也可以使用 '('
或 "("
达到相同的效果。
请注意,使用括号进行分组(以及每次 test
调用执行多个测试操作的所有其他情况——也意味着 -a
和 -o
)是在 the POSIX standard for test
中标记为过时,不应在新代码中使用(请参阅标准文档中的 OB
标记)。
更好的写法是:
if [ "$ACTION" = "install" ] || { [ "$ACTION" = "start" ] && [ -z "$APPS" ]; }; then
...或者,使用 [[
(提供解析器支持的 ksh 和 bash 扩展,在大多数位置不需要引号并允许 (
和 )
在不需要转义的情况下作为测试操作的一部分进行解析):
if [[ $ACTION = install || ( $ACTION = start && -z $APPS ) ]]; then
我正在编辑别人的.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> \)
) 是 start/end 评论吗?我查看了 here,这不是我期望的正常条件分组。
编辑:为了帮助表达我的想法,这在大多数其他编程语言中都是等效的。因为我是 bash 的新手,所以开放式 ||
对我来说并不奇怪。
if (ACTION == 'install' || /* ACTION == 'start' && APPS == '' */)
\(
对字符 (
进行了转义,因此它不会被 shell 视为语法,而是作为参数传递给 test
(又名 [
).您也可以使用 '('
或 "("
达到相同的效果。
请注意,使用括号进行分组(以及每次 test
调用执行多个测试操作的所有其他情况——也意味着 -a
和 -o
)是在 the POSIX standard for test
中标记为过时,不应在新代码中使用(请参阅标准文档中的 OB
标记)。
更好的写法是:
if [ "$ACTION" = "install" ] || { [ "$ACTION" = "start" ] && [ -z "$APPS" ]; }; then
...或者,使用 [[
(提供解析器支持的 ksh 和 bash 扩展,在大多数位置不需要引号并允许 (
和 )
在不需要转义的情况下作为测试操作的一部分进行解析):
if [[ $ACTION = install || ( $ACTION = start && -z $APPS ) ]]; then