2017-04-05 33 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

感謝編輯的人。我在地鐵上,我無法一路回答。 –