为什么read在bash和dash中的行为不同?
这是一次尝试,旨在了解read实用程序如何在多个shell中工作。发现了一个对我来说像虫子一样的差异 结果是,dash保留了带有read的尾随空格:为什么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
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
行为是正确的