

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]


CC BY-SA 3.0
2014-12-22T03:04:09.460
2350
2014-12-22T04:35:59.287
2014-12-22T04:35:59.287
5472
5472
question
bash
プロセス置換を使ったスクリプトを一時ファイルを使わずにBash 3.1.20に対応させたい


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

[code]

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


CC BY-SA 3.0
2014-12-22T03:35:55.830
2356
2014-12-22T03:35:55.830
4010
2350
answer


手元にbash-1.14を対象としたbash入門（O'REILLY）がありますが、プロセス置換についても説明されています。Bash
3.1.20でも扱えると思います。


CC BY-SA 3.0
2014-12-22T03:54:45.590
2358
2014-12-22T03:54:45.590
4236
2350
answer