为什么默认$ IFS扩展到换行符,当"为$ string"在空格上分裂?

时间:2018-05-22 16:16:20

标签: bash echo ifs

当我通过命令行执行以下代码时:

(
    mystring="foo:bar baz rab"
    for word in $mystring; do
      echo "Word: $word"
    done
)

我得到的结果是:

Word: foo:bar
Word: baz
Word: rab

这意味着$IFS将被解释为空格字符。 但后来我尝试通过以下方式来扭转它:

echo "foo:bar${IFS}baz${IFS}rab"

并打印:

foo:bar
baz
rab

现在意味着$IFS\n。我原以为"foo:bar baz rab"

造成这种不一致的原因是什么?

1 个答案:

答案 0 :(得分:3)

$*默认包含三个字符:空格(第一个),制表符(第二个),换行符(第三个)。

这意味着这三个字符中的任何一个都可以充当单词分隔符。 # Combine array elements with the first character in IFS using ${array[*]} array=( foo:bar baz rab ) echo "${array[*]}" 仅使用这三个中的第一个来分隔单词。

如果要从数组生成字符串(由IFS中的第一个字符分隔),请考虑:

ws.Cells(i, 2) = parsedResult("From")(Item)("Price")