3 bash shell built-in dash-shell
这是尝试找出read实用程序如何在多个shell中工作.发现差异对我来说似乎是个错误.
结果是破折号保留尾随空格,显示为:
dash: <a b >
bash: <a b>
Run Code Online (Sandbox Code Playgroud)
简而言之:为什么这个代码在bash和dash读取中表现不同?
dash -c 'echo " a b " | { read var; echo "<$var>"; }'
bash -c 'echo " a b " | { read var; echo "<$var>"; }'
Run Code Online (Sandbox Code Playgroud)
这是一种更简单的方式来演示您的问题:
$ dash -c 'echo "a b " | { read var; echo "<$var>"; }'
<a b >
$ bash -c 'echo "a b " | { read var; echo "<$var>"; }'
<a b>
Run Code Online (Sandbox Code Playgroud)
只有当有两个或更多字段时才会发生这种情况"a b ",而不是只有一个字段,例如"a ".
这是POSIX所说的(强调我的):
如果vars少于字段,则最后一个var应设置为包含以下元素的值:
对应于上述正常分配序列中的最后一个var的字段
跟在对应于最后一个var的字段之后的分隔符
其余字段及其分隔符,忽略尾随IFS空格
dash 不会忽略尾随的IFS空格,因此它似乎违反了POSIX.
该bash行为是正确的.