我如何在OSX中的bash case语句中落实?

时间:2013-01-30 19:58:59

标签: macos bash

我有一些bash脚本,我想在OSX中运行,但其中一些包含了fallthrough案例终结符';&'这似乎不适用于Mac。这是示例代码:

#!/bin/bash
case $1 in
    test)
        echo "go" ;&    
    test)
        echo "go2" ;;
esac

在Cygwin中,。\ test.sh test生成

go
go2

但是在OSX上,

./test.sh: line 4: syntax error near unexpected token `&'
./test.sh: line 4: `            echo "go" ;&   

2 个答案:

答案 0 :(得分:5)

您的代码在我的ubuntu系统上工作,bash 4.2.24。

我认为您使用的是早期版本的bash,它不支持自bash 4以来添加的;&版本。

来自wikipedia

Fall through is done using ;& (new since Bash 4) whereas ;; acts as a case break.

答案 1 :(得分:2)

也许您可以尝试使用/bin/zsh代替/bin/bash?您的示例代码在我的MacOS X 10.6.8上使用“zsh 4.3.9”而不是“bash 3.2.48”。

否则,必须以某种方式重写脚本......但是如果不知道它的作用,很难确切地说出来。简单地根据需要复制代码可能是最简单的选择,并且应该适用于所有情况。