【发布时间】:2015-05-15 10:30:08
【问题描述】:
我希望我能理解 BASH 中使用的引用及其区别" "、' '、$' '。
我看到很多shell脚本包含
IFS=$'\n'
但是没有
IFS="\n"
至少在我看来没有区别。 并且在我的环境中都可以正常工作(据我所知), 这里有什么区别?这只是一种习俗吗?
【问题讨论】:
-
请注意,ANSI C Quoting 又不同于单引号、双引号和反引号。
我希望我能理解 BASH 中使用的引用及其区别" "、' '、$' '。
我看到很多shell脚本包含
IFS=$'\n'
但是没有
IFS="\n"
至少在我看来没有区别。 并且在我的环境中都可以正常工作(据我所知), 这里有什么区别?这只是一种习俗吗?
【问题讨论】:
它们不一样。
IFS=$'\n' 将IFS 的值设置为文字换行符。
IFS="\n" 将IFS 的值设置为字符串\n。
看到了吗?
$ IFS=$'\n'
$ declare -p IFS
declare -- IFS="
"
$ IFS="\n"
$ declare -p IFS
declare -- IFS="\\n"
$ IFS="\n" read a b c <<<$'anbncndn'
$ declare -p a b c
declare -- a="a"
declare -- b="b"
declare -- c="cndn"
$ IFS=$'\n' read a b c <<<$'anbncndn'
$ declare -p a b c
declare -- a="anbncndn"
declare -- b=""
declare -- c=""
【讨论】: