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