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)
time
in Bash 是一个保留字,其行为与time
程序不同。您很可能会破坏一些尝试time
使用 bash解析结果的实用脚本。但从技术上讲,这不是语法错误。重新定义time
为函数的情况很少见,但会导致此问题指定的语法错误。
一个较短的例子:
a():
Run Code Online (Sandbox Code Playgroud)
在 中有效dash
,但不符合 POSIX。