这是试图找出read实用程序如何在多个shell中工作。发现差异对我来说似乎是个错误。
结果是破折号用read:
保留尾随空格dash: <a b >
bash: <a b>
简而言之:为什么这个代码在bash和dash读取中表现不同?
dash -c 'echo " a b " | { read var; echo "<$var>"; }'
bash -c 'echo " a b " | { read var; echo "<$var>"; }'
答案 0 :(得分:5)
以下是展示问题的简便方法:
$ dash -c 'echo "a b " | { read var; echo "<$var>"; }'
<a b >
$ bash -c 'echo "a b " | { read var; echo "<$var>"; }'
<a b>
仅当有两个或多个字段时才会发生这种情况,例如"a b "
,而不是只有一个字段,例如"a "
。
这是what POSIX says(强调我的):
如果vars少于字段,则最后一个var应设置为包含以下元素的值:
对应于上述正常分配序列中最后一个变量的字段
与最后一个var对应的字段后面的分隔符
其余字段及其分隔符忽略尾随IFS空格
dash
不会忽略尾随的IFS空格,因此它似乎违反了POSIX。
bash
行为是正确的。