在 sh bash ... ("") ($'') ('') 中引用

Quoting in sh bash ... ("") ($'') ('')

我希望我能理解 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=""