2014-04-01 41 views
1

我在與一個bash腳本一個奇怪的問題,不同的行爲。最小代碼重現它是在這裏:奇詭在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)按預期工作的慶典。 上我的Debian穩定在bash(4.2.37(1)-release)給出所描述的不協調。

回答

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 
+0

感謝您指出這是一個在bash中的錯誤,而不是我的理智錯誤。 – Niobos