在「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"變量,則不會執行分詞,因此您應該看到與第一種情況相同的輸出(只有一行)。

相關內容