IFS
环境变量设置为换行符...IFS=$'\n'
- 美元符号到底代表什么?
- 在这种情况下它有什么作用?
- 在哪里可以阅读更多关于这个用法的信息(谷歌不允许搜索特殊字符,而我也不知道该搜些什么)?
我知道 IFS
环境变量的含义以及 \n
字符的含义(换行符),但为什么不直接使用以下形式: IFS="\n"
(该形式不起作用)?
例如,如果我想循环遍历文件的每一行并使用 for 循环,我可以这样做:
for line in (< /path/to/file); do
echo "Line: $line"
done
不过,除非将IFS
设置为换行符,否则这种方法不会正确运行。为了使它正常工作,我需要这样做:
OLDIFS=$IFS
IFS=$'\n'
for line in (< /path/to/file); do
echo "Line: $line"
done
IFS=$OLDIFS
注意: 我不需要另一种做同样事情的方法,我已经知道很多其他方法了...我只是对$'\n'
感到好奇,并想知道是否有人能够解释一下。
\n
只是一个转义后的字母n。你是对的,'\n'
和"\n"
都是反斜杠加上n。 - Roman Cheplyaka$'\n'
是 Bash 特有的语法,在 POSIX shell (/bin/sh
) 中不适用。为了在符合 POSIX 标准的方式下达到相同的效果,你可以输入IFS='
,然后按回车键来输入一个实际的换行符,接着再输入结束的'
。 - Richard HansenIFS=$(echo -e '\n')
可以在符合 POSIX 的方式中实现。 - Vineet-e
未定义,而\n
没有-e
也可作为XSI扩展使用。详见:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html#tag_20_37 。printf '\n'
很好用 ;) - Ciro Santilli OurBigBook.com