\( 在 bash 脚本中是什么意思

拉维尔卡

我正在编辑别人的.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> \)) 是开始/结束注释吗?我看了这里,这不是我期望的正常条件分组。

查尔斯·达菲

\(转义字符,(因此它不会被外壳视为语法,而是作为参数传递给test(aka [)。使用'('也可以达到相同的效果"("

注意,使用括号进行分组(并在每进行一次以上的测试操作的所有其他情况下test调用-这意味着-a-o也)被标记为过时的POSIX标准test,而不应在新代码中使用(见OB标记在标准文件中)。

更好的写法是:

if [ "$ACTION" = "install" ] || { [ "$ACTION" = "start" ] && [ -z "$APPS" ]; }; then

...或者,使用[[(提供解析器支持的 ksh 和 bash 扩展,在大多数位置不需要引号,并允许()作为测试操作的一部分进行解析而无需转义):

if [[ $ACTION = install || ( $ACTION = start && -z $APPS ) ]]; then

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章