此问题在此处已有答案:
I just assigned a variable, but echo $variable shows something else(7个答案)
7天前关闭。
简介
我试图在一个文件上逐行执行一些指令:
while IFS= read -r line; do
...
done < file
当我注意到尾随空格有问题时(例如:" a "
=〉"a"
)被自动删除,这对我来说是一个真实的的问题。
我在文档中搜索了一下,没有发现任何关于这个的内容。printf也有同样的问题。
最小示例:
touch example # Create a file
echo " exa mple " >> example # Add some text
cat example # exa mple
echo $(cat example) # exa mple
rm example # Delete the file
在这个例子中,我不明白为什么echo $(cat example)
没有一些尾随空格。
而这个“问题”也在这里伴随着:
while IFS= read -r line; do
echo $line # exa mple
done < example
版本:
测试对象:
zsh v5.9
bash v5.2.2
1条答案
按热度按时间bwleehnv1#
IFS= read -r line < file
正在正确阅读 * 带有 * 前导和尾随空格的未修改行。您可以通过使用declare -p line
打印变量来确认这一点。但是在你正确地读取了这些行之后,你在打印命令的过程中却损坏了它们。
echo $(cat example)
和echo $line
都有不带引号的扩展,这会导致shell对你的行进行字拆分。引用它们来解决问题:
顺便说一下,https://shellcheck.net/非常适合发现和解释这样的错误。