在我的 Red Hat Linux 系统上/bin/sh
有一个链接bash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Sep 27 13:17 /bin/sh -> bash
直接运行这个人为的测试程序给了我预期的答案
$ cat ./test.sh
#!/bin/sh
# Just a test program to illustrate an issue
case "b" in
(a) echo "a"; break;;
(b) echo "b"; break;;
(c) echo "c"; break;;
esac
$ ./test.sh
b
但是在 下显式运行它bash
,或者更改要调用的初始行bash
会出现错误。我知道这可能是一个真正的bash
错误 - 但为什么会出现这种差异?
$ /bin/bash ./test.sh
b
./test.sh: line 5: break: only meaningful in a `for', `while', or `until' loop
$ sed -e 's/sh/bash/' test.sh > test1.sh
$ chmod 777 test1.sh
$ ./test1.sh
b
./test1.sh: line 5: break: only meaningful in a `for', `while', or `until' loop
答案1
答案2
从 bash 手册页:
如果使用 sh 名称调用 bash,它会尝试尽可能模仿 sh 历史版本的启动行为,同时也符合 POSIX 标准。
与 C/C++ 相反,您不需要break
在 shell 脚本中使用 switch/case 语句。