首页 > 解决方案 > IFS=: "set $var" 与 "set toto:fofo"

问题描述

这可能是一个愚蠢的问题,但我试图理解为什么下面代码的版本 1 有效而版本 2 无效:

版本 1:

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

版本 2:

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

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

标签: bash

解决方案


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

这里man bash有重点:

IFS

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


推荐阅读