我的代码需要for循环内的响应。
在循环之前,我设置了IFS="\n"
忽略循环echo -n
(最后一行除外)。
注意:这只是echo -n
示例:
IFS='\n' for line in `cat file` do echo -n $line done
输出:
- 这是一个测试
- 这是一个测试
- 这是一个测试$
醇>
用户提示仅在最后一行的末尾发生。
为什么会发生这种情况并且有解决方法?
答案 0 :(得分:6)
IFS='\n'
和$IFS
都未将\
设置为换行符;相反,他们将其设置为 literal n
,然后是 literal IFS=$'\n'
。
您必须使用ANSI C-quoted string才能分配实际换行符:\n
;或者,您可以使用包含实际换行符的正常字符串文字(跨越2行)。
分配文字 cat file
会导致$IFS
的输出不分成行,因为实际换行不存在于\
;可能 - 虽然没有您的示例文件内容 - 但输出可能已被嵌入的n
和for
字符拆分为字段。
如果没有,整个文件内容会立即传递,从而导致while IFS= read -r line; do
echo -n "$line"
done < file
循环的单次迭代。
那就是说,你在文件中循环的方法是ill-advised;尝试类似以下内容:
int a[3][3]
答案 1 :(得分:0)
在bash中解析文件时,切勿使用for循环。请改用while循环。这是一个非常好的教程。