为什么 read 使用默认 IFS 和单个变量添加换行符?

为什么 read 使用默认 IFS 和单个变量添加换行符?

我正在试验和IFSread我尝试了以下操作,但我不明白为什么结果会是这样:

$ IFS=$' \t\n'
$ read a <<< "the plain gold ring"
$ printf "=%s=\n" $a
=the=
=plain=
=gold=
=ring=
  1. 现在是a数组吗?还是字符串?
  2. 为什么要read在两个单词之间添加换行符?
  3. 为什么printf打印就像在循环内一样?

我实际上预计不会发生分离,因为我只读取一个变量a

答案1

  1. 现在是a数组吗?还是字符串?

它是一个字符串。您被告知read要读取单个变量,整个字符串将存储为a。如果命令是read a b c <<< …,那么a将获得theb将获得,plain并将c获得gold ring

  1. 为什么要read在两个单词之间添加换行符?

它没有,printf因为你告诉它这么做。运行echo $a

  1. 为什么printf打印就像在循环内一样?

因为$a扩展为多个单词。您提供的格式需要一个字符串,但它会得到很多字符串。参数太多会导致printf循环。比较单个参数的printf "=%s=\n" "$a"位置。"$a"printf

相关内容