プロセス置換を使ったスクリプトを一時ファイルを使わずにBash 3.1.20に対応させたい


Bash 4ではプロセス置換が使えるので、例えば以下のような記述が可能です。

[code]

    $ paste -d" " <(echo "hoge") <(echo "piyo")
    hoge piyo
    
[/code]

しかし、Bash 3.1.20ではプロセス置換が使えないので、これを愚直に書き換えようとすると一時ファイルを使わなければなりません。

[code]

    $ echo "hoge" > temp1
    $ echo "piyo" > temp2
    $ paste -d" " temp1 temp2
    hoge piyo
    $ rm temp1 temp2
    
[/code]

これを一時ファイル使わないよりスマートな方法でBash 3に対応するように書き換えたいのですが、どのようにすればよいでしょうか。

( `echo "hoge"` `echo "piyo"` の部分は実際にはより複雑なコマンドが入り、その出力には改行が含まれます)

* * *

結論:

どうやらmsys固有の問題のようです。

手元のmsys2(cygwinに近い)のbashでは動いたので使えるならそちらを使いましょう。

<https://lists.gnu.org/archive/html/help-bash/2014-11/msg00046.html>

動く:

[code]

    $ bash --version
    GNU bash, version 4.3.30(5)-release (x86_64-pc-msys)
    Copyright (C) 2013 Free Software Foundation, Inc.
    
[/code]

動かない:

[code]

    $ bash --version
    GNU bash, version 3.1.20(4)-release (i686-pc-msys)
    Copyright (C) 2005 Free Software Foundation, Inc.
    
[/code]




Bash 3でもプロセス置換は使えるのではないかと思います。

[code]

    $ echo $BASH_VERSION
    3.2.25(1)-release
    $ paste -d' ' <(echo hoge) <(echo piyo)
    hoge piyo
    
[/code]

