私はbashの内部変数について読んでいて、この例に出くわしましたIFS
:
output_args_one_per_line()
{
for arg
do
echo "[$arg]"
done # ^ ^ Embed within brackets, for your viewing pleasure.
}
CASE1
IFS=" "
var=" a b c "
output_args_one_per_line $var
#OUTPUT
# [a]
# [b]
# [c]
CASE2
IFS=:
var=":a::b:c:::" # Same pattern as above
CASE2
# but substituting ":" for " " ...
output_args_one_per_line $var
# []
# [a]
# []
# [b]
# [c]
# []
# []
さて、私の理解によれば、値IFS
がデフォルト\t\n
よりも先頭と末尾の空白が削除されている場合。したがって、case1 の場合、bash はvar
出力をa b c
参照します。
私によると、ケース2の場合、bashはここvar
のように|a||b|c|||
扱わ|
れspace
ます。を使って確認しました
Noob@Noob:~/tmp$ IFS=$':' FOO=$":a::b:c:::"; echo $FOO $'x'
a b c x
したがって、ケース 2 の期待される出力は次のとおりです。
# []
# [a]
# []
# []
# [b]
# [c]
# []
# []
# []
それで、誰かがvar
ケース2でbashがどのように扱っているか、そして私の理解のどこで間違っているのかを内部的に説明してもらえますか。