1

我在使用 bash 脚本时遇到了一个奇怪的问题。重现它的最小代码在这里:

#!/bin/bash

function f() {
    IFS=. read a b <<<"$1"
    echo "a=$a b=$b"
}

f a.b
echo "inside echo: `f a.b`"
cat <<EOT
Inside heredoc: `f a.b`
EOT

预期的输出是:

a=a b=b
inside echo: a=a b=b
Inside heredoc: a=a b=b

但我得到:

a=a b=b
inside echo: a=a b=b
Inside heredoc: a=a.b b=

我在这里想念什么?

更新:我的 Mac (3.2.48) 上的 bash 按预期工作。我的 debian stable(4.2.37(1)-release)上的 bash 给出了所描述的奇怪之处。

4

1 回答 1

1

这是本地环境更改如何与此处的字符串交互的错误,已在即将发布的 4.3 版中修复。

# bash 3.2
% bash tmp.bash
a=a b=b
inside echo: a=a b=b
Inside heredoc: a=a b=b

# bash 4.2
% /usr/local/bin/bash tmp.bash
a=a b=b
inside echo: a=a b=b
Inside heredoc: a=a.b b=

# bash 4.3, release candidate
% bash/bash tmp.bash
a=a b=b
inside echo: a=a b=b
Inside heredoc: a=a b=b
于 2014-04-01T19:06:30.247 回答