bash-IFS更改for循环中echo-n的行为
我的代码需要在for循环中进行响应 在循环之前,我设置bash-IFS更改for循环中echo-n的行为,bash,Bash,我的代码需要在for循环中进行响应 在循环之前,我设置IFS=“\n” 在循环中,echo-n被忽略(最后一行除外) 注意:这只是echo-n 例如: 这将产生: 这是一个测试 这是一个测试 这是一个测试$ 用户提示仅出现在最后一行的末尾 为什么会发生这种情况?是否有修复程序?既不IFS=“\n”也不IFS='\n'将$IFS设置为换行符;相反,他们将其设置为literal\,后跟literaln 您必须使用以分配实际换行:IFS=$'\n';或者,您可以使用包含实际换行符(跨越2行)的普通字符
IFS=“\n”
在循环中,echo-n
被忽略(最后一行除外)
注意:这只是echo-n
例如:
这将产生:
IFS=“\n”
也不IFS='\n'
将$IFS
设置为换行符;相反,他们将其设置为literal\
,后跟literaln
您必须使用以分配实际换行:IFS=$'\n'
;或者,您可以使用包含实际换行符(跨越2行)的普通字符串文字
分配literal\n
的效果是,cat文件
的输出没有拆分成行,因为实际的换行符不在$IFS
中;可能-虽然不是与示例文件内容一起-输出可能已按嵌入的\
和n
字符拆分为字段。如果没有这两个选项,整个文件内容将立即传递,从而导致
for
循环的一次迭代
也就是说,从文件中循环行的方法是;请尝试以下方法:
while IFS= read -r line; do
echo -n "$line"
done < file
而IFS=read-r行;做
echo-n“$line”
完成<文件
既不IFS=“\n”
也不IFS='\n'
将$IFS
设置为换行;相反,他们将其设置为literal\
,后跟literaln
您必须使用以分配实际换行:IFS=$'\n'
;或者,您可以使用包含实际换行符(跨越2行)的普通字符串文字
分配literal\n
的效果是,cat文件
的输出没有拆分成行,因为实际的换行符不在$IFS
中;可能-虽然不是与示例文件内容一起-输出可能已按嵌入的\
和n
字符拆分为字段。如果没有这两个选项,整个文件内容将立即传递,从而导致
for
循环的一次迭代
也就是说,从文件中循环行的方法是;请尝试以下方法:
while IFS= read -r line; do
echo -n "$line"
done < file
而IFS=read-r行;做
echo-n“$line”
完成<文件
在bash中解析文件时,不要使用for循环。改用while循环。这里有一个非常好的教程
在bash中解析文件时,切勿使用for循环。改用while循环。这里有一个非常好的教程
尝试
查找$中的行(IFS='\n'cat文件);do…
无需对$中的行使用cat
和IFS
尝试(IFS='\n'cat文件);执行…
无需使用cat
和IFS