Bash脚本:如何在for循环中使用换行符?语法解释?

4

一个经常被问及的问题,无论是在Stack Overflow还是其他地方,就是如何使用Bash for循环遍历每一行输出。我知道答案,而且我已经开心地使用以下内容多年了:

IFS=$'\n'

然而,我对所使用的语法感到有些困惑。我进行了搜索/谷歌,但由于搜索引擎在上述内容中使用/忽略的大量符号,我没有找到解释。我最近还在另一个脚本的输出中看到了这个。我在回显netcat的结果时遇到了问题。仔细检查后,发现nc的输出格式类似。
$'Some_Output_Here\r`

我最终需要切掉\r,但不确定最佳方法是什么,最终我使用了egrep -o ([0-9|a-Z]*)。还有更好的想法吗?


FYI,循环读取文件内容的首选方式不是使用for循环,而是使用while read循环;请参见[BashFAQ#1](http://mywiki.wooledge.org/BashFAQ/001)。 - Charles Duffy
2个回答

2

实际的Bash手册没有提到这个名称的结构(不幸的是),但您可以通过搜索“ANSI C”找到相关部分。 - chepner
1
Bash手册的信息比man页面更完整和易懂。假设已安装,通过运行“info bash”获取它。 - Michael Hoffman

1

迈克尔编辑了原始帖子后,我认为它更有意义了。

我认为发帖人需要查找回车符的删除方法。这应该足够了。

sed -e 's/^M//g'

有很多其他方法可以删除控制非打印字符:

所有控制字符:

egrep -v "[[:cntrl:]]"
sed -r "s/[[:cntrl:]]//g"

不可打印字符

tr -dc '[:print:]'

我所做的只是删除了“任何帮助/指针将不胜感激。jwa”。 - Michael Hoffman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接