在“for 循环”中使用 IFS

在“for 循环”中使用 IFS
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”相同

答案1

最大的区别在于分词的位置。双引号确保文字字符串或带引号的变量"$lis"将被视为单个项目

for i in "a:b:c:d:";
do 
    echo the output is $i
done

因此,在此循环中,双引号"a:b:c:d:"是单个项目,因此您只看到一行输出

the output is a b c d

for i in $lis;
do 
    echo the output is $i
done

这里的$lis未加引号,因此 shell 将根据IFS您设置的值执行分词。 shell 将看到有 4 个项目提供给 for 循环。这就是为什么你会看到四行输出。

如果您使用双引号"$lis"变量,则不会执行分词,因此您应该看到与第一种情况相同的输出(只有一行)。

相关内容