Bash不尊重cat

时间:2017-09-29 18:56:20

标签: bash command newline substitution cat

假设我们有一个文件list.txt:

line 1
line 2

如果我使用它:

for line in $(cat list.txt)
do 
echo $line"_"
done

即使我这样做:

OLD_IFS=$IFS
$IFS='$'

我明白了:

line1
line2_

而不是:

line1_
line2_

我该如何解决这个问题?

1 个答案:

答案 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