变量赋值和 IFS

变量赋值和 IFS

根据格雷格的维基IFS使用变量:

  • read命令中,如果指定了多个变量名参数,IFS则用于分割输入行,以便每个变量获取输入的单个字段。
  • 对未加引号的扩展执行 WordSplitting 时,IFS用于将扩展的值拆分为多个单词。
  • 执行"$*"or"${array[*]}"扩展时,将 的第一个字符IFS放置在元素之间以构造最终的输出字符串。
  • 执行 时"${!prefix*}",将 的第一个字符IFS放置在变量名称之间以形成输出字符串。
  • IFScomplete -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"

相关内容