差异;&和;; 在bash脚本中

Wes*_*and 3 linux macos bash

我正在将一个bash脚本从一个Linux盒子复制到我的Mac笔记本电脑上,在这个过程中,脚本开始抱怨使用它;&.

有错误:

./build.sh:line 122:意外标记附近的语法错误`;'
./build.sh:line 122:`;&'

脚本中有一些用法,但简短的用法是:

case ${OPTION} in
    xxx)
        export DEVICES=xxx
         ;;
    yyy)
        export DEVICES=yyy
         ;;
    *)
        echo "${OPTION}: Unknown device type:  use xxx|yyy"
        exit 1
        ;&
    esac
;;
Run Code Online (Sandbox Code Playgroud)

我已经更换了所有的用法;&;;这一切都很好,但我仍然好奇,我做了什么.案例陈述中分号符号和双分号之间的区别是什么?

Joh*_*024 5

来自man bash:

使用;代替;; 导致执行继续与下一组模式相关联的列表.

由于;&发生在case语句中的最后一个模式上,因此该脚本应该没有区别.

  • 换句话说,`;&`模仿C switch语句的落空行为.它在OS X上不起作用的原因是OS X附带了过时的Bash版本. (5认同)