我需要在bash中遍历文本文件的行,我想保留空格。最终目标是提供可能包含空格的this line个短语。
所以,给定一个包含
的phrase_filexdebug
var_dump
dump(
pwet
meuh
coin
当我尝试这个时:
while read -r PHRASE
do
echo "$PHRASE"
done < phrase_file
输出结果为:
xdebug
var_dump
dump(
pwet
meuh
coin
dump()
之前的空白去了哪里,我该怎样才能找回来?
答案 0 :(得分:4)
您可以使用内置的$REPLY
变量来捕获整行:
while read -r; do
echo "$REPLY"
done < phrase_file
请注意,如果您为变量命名(例如示例中的PHRASE
),则不会设置$REPLY
。
答案 1 :(得分:2)
只需将IFS
变量设置为空:
while IFS= read -r var;
do
echo "$var"
done < file
返回:
$ while IFS= read -r var; do echo "$var"; done < file
xdebug
var_dump
dump(
pwet
meuh
coin
来自How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?:
IFS =防止修剪前导空格和尾随空格。
答案 2 :(得分:2)
-r
按字面意思处理输入,但是为read
提供参数会导致根据IFS
拆分行,其副作用是删除默认值领先和尾随空白。正如Tom Fenech指出的那样,bash
read
可以省略一个参数,未分割的输出存储在REPLY
中。如果您不想使用REPLY
,只需将IFS
设置为空字符串即可防止分词。
# all uppercase variable names are reserved for the shell;
# put at least one lowercase letter or number in your names
while IFS= read -r phrase; do
echo "$phrase"
done < phrase_file