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 中失败 ( )。
我如何让它在破折号中工作?
派生自 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。
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |