这:
set -x
rm -f p; mkfifo p
exec 99<>p
在 bash 中成功,但"99 not found"
在 dash 中失败 ( )。
我如何让它在破折号中工作?
答案1
源自 Bourne Shell 的 POSIX 标准及其后代 ksh88 明确提到这是不允许工作的。原因是 shell 语法:
<>file
打开标准输入以进行读取和写入,并且:
[n]<>file
打开文件描述符n
以进行读取和写入。
n
在本例中是一个数字。
您使用了数字 99,这是一个超出 POSIX 指定范围的两位数字。因此解析器没有将其视为与重定向运算符相关的数字,而是将其视为单独的参数。所以这个参数被视为要执行的文件exec
。
如果您喜欢可移植脚本,请遵循 POSIX 标准;如果您喜欢编写完全可移植的脚本,请使脚本 100% Bourne Shell 兼容。
由于在您的情况下似乎没有理由使用 99,因此我建议使用 9。