自动修剪空格的Shell [duplicate]

k4aesqcs  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(102)

此问题在此处已有答案

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
bwleehnv

bwleehnv1#

IFS= read -r line < file正在正确阅读 * 带有 * 前导和尾随空格的未修改行。您可以通过使用declare -p line打印变量来确认这一点。

但是在你正确地读取了这些行之后,你在打印命令的过程中却损坏了它们。echo $(cat example)echo $line都有不带引号的扩展,这会导致shell对你的行进行字拆分。

引用它们来解决问题:

echo "$(cat example)"
echo "$line"

顺便说一下,https://shellcheck.net/非常适合发现和解释这样的错误。

相关问题