假设我们有一个文件list.txt:
line 1
line 2
如果我使用它:
for line in $(cat list.txt)
do
echo $line"_"
done
即使我这样做:
OLD_IFS=$IFS
$IFS='$'
我明白了:
line1
line2_
而不是:
line1_
line2_
我该如何解决这个问题?
答案 0 :(得分:2)
忽略错误的作业$IFS='$'
,$
并不意味着换行,换行或行尾。它意味着字面上的美元符号。
要分配换行符,请使用
IFS=$'\n'
但是,不要尝试使用它来迭代线。相反,使用while read
循环,它不会扩展globs或折叠空行:
while IFS= read -r line
do
echo "${line}_"
done < file
或具有类似的好处,请使用mapfile
:
mapfile -t lines < file
for line in "${lines[@]}"
do
echo "${line}_"
done