2017-04-05 85 views
0

我陷入了奇怪的问题。当它从bash脚本被调用时,进程替换不起作用,但是当我从终端进行拍摄时,它会起作用。进程替换不能在bash脚本中工作

这里是例子:在终端上运行。

terminal>echo "$x" 
a b c 
d e f 
g h i 
j k l 

terminal>echo "$y" 
1 
2 
3 
4 

terminal>paste <(echo "$x") <(echo "$y") -d' ' 
a b c 1 
d e f 2 
g h i 3 
j k l 4 

这里是例子:示例脚本


#!/bin/bash 
    x='a b c 
    d e f 
    g h i 
    j k l' 


    y='1 
    2 
    3 
    4' 

    paste <(echo "$x") <(echo "$y") -d' ' 

当我上面的脚本中,我得到以下错误:

test: line 12: syntax error near unexpected token `(' 
test: line 12: `paste <(echo "$x") <(echo "$y") -d' '' 

以下是贝壳我的详细信息正在使用。

echo $SHELL 
/bin/bash 
bash --version 
GNU bash, version 4.2.47(1)-release (x86_64-suse-linux-gnu) 

有没有其他方法可以绕过这个问题?不一定我想坚持进程替代。

希望的O/P:当bash处于POSIX模式

a b c 1 
d e f 2 
g h i 3 
j k l 4 
+2

您的脚本在我的bash 4.3.30上运行Debian jessie。您发布的脚本是您试图执行的真实脚本吗? –

+0

完全一样。 –

+1

它工作正常,你检查了'CRLF' DOS结局吗?从Windows编辑器复制的可能是? – Inian

回答

2

进程替换不起作用。请禁用POSIX并重试。

禁用:这将导致进程替换工作。

set +o posix 

启用::这将导致进程替换不工作。

set -o posix 
+0

感谢编辑的人。我在地铁上,我无法一路回答。 –