lis="a:b:c:d:"
IFS=:
如果我运行以下代码,
for i in "a:b:c:d:";
do
echo the output is $i
done
我得到:
the output is a b c d
如果我用 $lis 代替“a:b:c:d:”:
for i in $lis;
do
echo the output is $i
done
我有预期的输出:
the output is a
the output is b
the output is c
the output is d
不知道怎么回事,$lis和"a:b:c:d"基本一样
最大的区别在于执行分词的位置。双引号确保将文字字符串或带引号的变量
"$lis"
视为单个项目因此在这个循环中,双引号
"a:b:c:d:"
是一个项目,因此为什么你只看到一行输出此处
$lis
未引用,因此 shell 将根据IFS
您设置的值执行分词。shell 将看到为 for 循环提供了 4 个项目。因此,为什么您会看到四行输出。如果双引号
"$lis"
变量,则不会执行分词,因此您应该看到与第一种情况相同的输出 - 只有一行。