我正在试验和IFS
。read
我尝试了以下操作,但我不明白为什么结果会是这样:
$ IFS=$' \t\n'
$ read a <<< "the plain gold ring"
$ printf "=%s=\n" $a
=the=
=plain=
=gold=
=ring=
- 现在是
a
数组吗?还是字符串? - 为什么要
read
在两个单词之间添加换行符? - 为什么
printf
打印就像在循环内一样?
我实际上预计不会发生分离,因为我只读取一个变量a
。
答案1
- 现在是
a
数组吗?还是字符串?
它是一个字符串。您被告知read
要读取单个变量,整个字符串将存储为a
。如果命令是read a b c <<< …
,那么a
将获得the
,b
将获得,plain
并将c
获得gold ring
。
- 为什么要
read
在两个单词之间添加换行符?
它没有,printf
因为你告诉它这么做。运行echo $a
。
- 为什么
printf
打印就像在循环内一样?
因为$a
扩展为多个单词。您提供的格式需要一个字符串,但它会得到很多字符串。参数太多会导致printf
循环。比较单个参数的printf "=%s=\n" "$a"
位置。"$a"
printf