IFS =:“设置$ var”与“设置toto:fofo”

时间:2019-09-24 21:04:24

标签: bash

这可能是一个愚蠢的问题,但是我试图理解为什么以下代码的版本1可以正常工作,而版本2却不起作用:

版本1:

$ VAR=toto:fofo:bar
$ IFS=:
$ set $VAR
$ echo $1
toto

版本2:

$ IFS=:
$ set toto:fofo:bar
$ echo $1
toto fofo bar

我不明白为什么在第一个版本中将':'解释为分隔符,但在第二个版本中却根本不解释它们,就好像仅当它们是变量替换的输出时才被解释一样?

1 个答案:

答案 0 :(得分:1)

您是对的。分词仅适用于不加引号的参数扩展和命令替换的结果。它不会影响外壳解析或语法。

这里是man bash,重点是:

  

IFS

     

内部字段分隔符,用于扩展后的分词 [...]