如何抑制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