根据格雷格的维基IFS
使用变量:
- 在
read
命令中,如果指定了多个变量名参数,IFS
则用于分割输入行,以便每个变量获取输入的单个字段。 - 对未加引号的扩展执行 WordSplitting 时,
IFS
用于将扩展的值拆分为多个单词。 - 执行
"$*"
or"${array[*]}"
扩展时,将 的第一个字符IFS
放置在元素之间以构造最终的输出字符串。 - 执行 时
"${!prefix*}"
,将 的第一个字符IFS
放置在变量名称之间以形成输出字符串。 IFS
complete -W
由可编程完成下使用
所以我的问题是,为什么必须IFS
在变量赋值中发挥作用?根据下面的内容,bash 对右侧的字符串应用分词 ( a:b:c:d
)。
$ IFS=: s=a:b:c:d
$ echo $s
a b c d
答案1
事实并非如此。你需要正确引用。根据 IFS 的值将分词应用于未加引号的扩展。问题在于你的echo
命令,而不是任务。
$ ( IFS=: s=a:b:c:d typeset -p s )
declare -- s="a:b:c:d"