我想我已经将 bash 配置为 shell,但为什么会发生这种情况?
我的外壳是 bash:
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
Run Code Online (Sandbox Code Playgroud)
使用 sh 执行脚本时出错
# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
Run Code Online (Sandbox Code Playgroud)
bash 没有错误
# bash ubuntu/util.sh
Run Code Online (Sandbox Code Playgroud)
Pet*_*ter 14
它正在运行您期望的 bash 可执行文件,但您的 shell 不仅仅是 bash;它是在 POSIXsh
兼容模式下运行的 bash 。它通过查看它被调用的命令名称来做到这一点,如果是sh
,那么它会自动激活 POSIX 模式。它在这方面做得非常糟糕,不应该完全依赖于测试 POSIXsh
兼容脚本,但它应该大大限制允许的语法。
--posix
更改 bash 的行为,其中默认操作不同于 POSIX 标准以匹配标准(posix 模式)。有关详细介绍 posix 模式如何影响 bash 行为的文档,请参阅下面的另请参见。
来自http://tiswww.case.edu/php/chet/bash/POSIX:
使用
--posix
命令行选项启动 Bash或set -o posix
在 Bash 运行时执行将通过更改行为以匹配 POSIX 在 Bash 默认值不同的区域中指定的行为,从而使 Bash 更符合 POSIX 标准。当作为 调用时
sh
,Bash 在读取启动文件后进入 POSIX 模式。
归档时间: |
|
查看次数: |
1301 次 |
最近记录: |