为什么read在bash和dash中的行为不同?

为什么read在bash和dash中的行为不同?,bash,shell,dash-shell,built-in,Bash,Shell,Dash Shell,Built In,这是一次尝试,旨在了解read实用程序如何在多个shell中工作。发现了一个对我来说像虫子一样的差异 结果是,dash保留了带有read的尾随空格: dash: <a b > bash: <a b> 破折号: 猛击: 简而言之:为什么这段代码在bash和dash read中的性能不同 dash -c 'echo " a b " | { read var; echo "<$var>"; }' bash -c 'echo " a b

这是一次尝试,旨在了解read实用程序如何在多个shell中工作。发现了一个对我来说像虫子一样的差异

结果是,dash保留了带有read的尾随空格:

dash: <a b     >
bash: <a b>
破折号:
猛击:
简而言之:为什么这段代码在bash和dash read中的性能不同

dash -c 'echo "    a b     " | { read var; echo "<$var>"; }'
bash -c 'echo "    a b     " | { read var; echo "<$var>"; }'
dash-c'echo“ab”{read var;echo”“;}
bash-c'echo“ab”{read var;echo”“;}

这里有一个更简单的方法来证明您的问题:

$ dash -c 'echo "a b     " | { read var; echo "<$var>"; }'
<a b     >
$ bash -c 'echo "a b     " | { read var; echo "<$var>"; }'
<a b>
$dash-c'echo“ab”{read var;echo”“;}
(我的重点):

如果变量少于字段,则应将最后一个变量设置为包含以下元素的值:

  • 与上述正常赋值序列中最后一个var相对应的字段

  • 与最后一个变量对应的字段后面的分隔符

  • 其余字段及其分隔符,忽略尾随的IFS空格

dash
不会忽略尾随的IFS空格,因此它似乎违反了POSIX

bash
行为是正确的