一个简单但烦人的事抑制庆典没有空白的输出:如何从消除空白处理文件时
text
问题我我在文字之前需要这个空间(大多数情况下它是一个标签,但并不总是)。
所以问题是:如何在输入文件中获得与此脚本相同的行?
更新:好了,我改变了我的while read x
到while IFS= read x
。
echo "$x"
给我正确的答案,没有剥离第一个标签,但,eval "echo $x"
去掉这个标签。
那我该怎么办?
一个简单但烦人的事抑制庆典没有空白的输出:如何从消除空白处理文件时
text
问题我我在文字之前需要这个空间(大多数情况下它是一个标签,但并不总是)。
所以问题是:如何在输入文件中获得与此脚本相同的行?
更新:好了,我改变了我的while read x
到while IFS= read x
。
echo "$x"
给我正确的答案,没有剥离第一个标签,但,eval "echo $x"
去掉这个标签。
那我该怎么办?
read
正在剥离空白。先擦拭$IFS
。
while IFS= read x
do
echo "$x"
done < file
将读取的全部内容放入名为REPLY的变量中。如果您使用REPLY而不是'x',则不必担心阅读的单词拆分和IFS等等。
我遇到了同样的麻烦,试图剥离文件名结尾的空格。 REPLY来救援:
find . -name '* ' -depth -print | while read; do mv -v "${REPLY}" "`echo "${REPLY}" | sed -e 's/ *$//'`"; done
我发现问题的解决方案'eval“echo $ x”剥离此选项卡。'这应该可以解决它:
eval "echo \"$x\""
我认为这将导致内(转义)报价将与回波进行评估,而我认为无论是
eval "echo $x"
和
eval echo "$x"
原因要在echo之前评估引号,这意味着传递给echo的字符串没有引号,导致空白空间丢失。所以完整的答案是:
while IFS= read x
do
eval "echo \"$x\""
done < file
太好了,谢谢。但是,请告诉我,为什么简单的阅读剥离白色空间?我认为它应该像现在这样通过线路。 – kasper 2011-02-17 01:50:10
来自`help read`:“... $ IFS中的字符被识别为单词分隔符。” – 2011-02-17 01:52:25