Dash exec 重定向错误

PSk*_*cik 3 io-redirection dash

这个:

set -x
rm -f p; mkfifo p
exec 99<>p
Run Code Online (Sandbox Code Playgroud)

在 bash 中成功,但"99 not found"在 dash 中失败 ( )。

我如何让它在破折号中工作?

sch*_*ily 5

派生自 Bourne Shell 的 POSIX 标准及其后代 ksh88 明确提到这不能正常工作。原因是shell语法:

<>file
Run Code Online (Sandbox Code Playgroud)

打开 stdin 进行读写,并且:

[n]<>file
Run Code Online (Sandbox Code Playgroud)

打开文件描述符n以进行读写。

n 在这种情况下是一位数。

您使用了数字 99,这是一个超出 POSIX 指定范围的两位数字。因此,解析器没有将其视为与重定向运算符相关的数字,而是将其视为单独的参数。所以这个参数被视为要执行的文件exec。

如果您喜欢可移植的脚本,请遵循 POSIX 标准,如果您喜欢编写完全可移植的脚本,请使其与 Bourne Shell 100% 兼容。

由于在您的情况下似乎没有理由使用 99,因此我建议使用 9。