如何抑制bash在处理文件时删除空格

如何抑制bash在处理文件时删除空格,bash,Bash,一件简单但烦人的事: 使用如下脚本: while read x; do echo "$x" done<file 将给我一个不带空格的输出: text 问题是我需要文本前的空白(主要是一个选项卡,但并不总是如此)。 所以问题是:如何在这样的脚本中获得与输入文件中相同的行 更新:好的,所以我将我的在读取x时更改为在IFS=read x时 echo“$x”在不剥离第一个选项卡的情况下为我提供了正确答案,但是eval“echo$x”剥离了这个选项卡 那我该怎么办呢?read正

一件简单但烦人的事:
使用如下脚本:

while read x; do  
    echo "$x"  
done<file
将给我一个不带空格的输出:

text
问题是我需要文本前的空白(主要是一个选项卡,但并不总是如此)。
所以问题是:如何在这样的脚本中获得与输入文件中相同的行


更新:好的,所以我将我的
在读取x时更改为
在IFS=read x时

echo“$x”
在不剥离第一个选项卡的情况下为我提供了正确答案,但是
eval“echo$x”
剥离了这个选项卡


那我该怎么办呢?

read
正在删除空白。首先擦拭
$IFS

while IFS= read x
do
  echo "$x"
done < file
而IFS=读取x
做
回音“$x”
完成<文件

读取的全部内容被放入一个名为REPLY的变量中。如果您使用REPLY而不是“x”,您就不必担心read的分词和IFS等问题

我遇到了与您在尝试删除文件名末尾的空格时遇到的相同的问题。救援人员的答复是:

find . -name '* ' -depth -print | while read; do mv -v "${REPLY}" "`echo "${REPLY}" | sed -e 's/ *$//'`"; done

我找到了“eval”echo$x“剥离此选项卡”问题的解决方案。这应该可以解决它:

eval "echo \"$x\""
我认为这会导致内部(转义)引号将使用echo进行计算,而我认为两者都是

eval "echo $x"

使引号在echo之前求值,这意味着传递给echo的字符串没有引号,从而导致空白丢失。因此,完整的答案是:

while IFS= read x
do
  eval "echo \"$x\""
done < file
而IFS=读取x
做
评估“回声”$x“
完成<文件

太好了,谢谢。但是,请告诉我,为什么简单阅读会删除空白??我认为它应该按原样通过这一行。从
帮助阅读:“…在$IFS中找到的字符被识别为单词分隔符。”该死的
帮助
无知。再次感谢
eval echo "$x"
while IFS= read x
do
  eval "echo \"$x\""
done < file