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