Ale*_*lls 31 bash shell-script posix
是否有任何sh代码在语法上不是有效的 bash 代码(不会对语法造成障碍)?
我想重写sh与bash某些命令。
Mic*_*mer 48
以下是一些在 POSIX sh 和 Bash中执行不同操作的代码:
hello &> world
Run Code Online (Sandbox Code Playgroud)
我不知道这对你来说是否“无效”。
在bash中,这两个标准输出和标准错误重定向从hello入档world。在 POSIX 中sh,它hello在后台运行,然后将空重定向到world,截断它(即它被视为& >)。
在许多其他情况下,Bash 扩展在运行时bash会发挥作用,并且在纯 POSIX 中会产生不同的效果sh。例如,大括号扩展是另一种,它在 Bash 的 POSIX 模式下也有相同的操作,而不是。
就静态语法错误而言,Bash 有两个未由 POSIX 指定的保留字(如[[和time),即[[ x有效的 POSIX shell 代码但 Bash 语法错误,以及可能导致语法错误的各种POSIX 不兼容错误的历史记录,例如来自这个问题的那个:
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
对于任何重要的情况,仅语法错误是“无效”的一个非常危险的定义,但它确实存在。
use*_*013 17
一个简短的例子:
time()(:)
Run Code Online (Sandbox Code Playgroud)
timein Bash 是一个保留字,其行为与time程序不同。您很可能会破坏一些尝试time使用 bash解析结果的实用脚本。但从技术上讲,这不是语法错误。重新定义time为函数的情况很少见,但会导致此问题指定的语法错误。
一个较短的例子:
a():
Run Code Online (Sandbox Code Playgroud)
在 中有效dash,但不符合 POSIX。
| 归档时间: |
|
| 查看次数: |
2891 次 |
| 最近记录: |