プロセス置換を使ったスクリプトを一時ファイルを使わずにBash 3.1.20に対応させたい
Bash 4ではプロセス置換が使えるので、例えば以下のような記述が可能です。
$ paste -d" " <(echo "hoge") <(echo "piyo")
hoge piyo
しかし、Bash 3.1.20ではプロセス置換が使えないので、これを愚直に書き換えようとすると一時ファイルを使わなければなりません。
$ echo "hoge" > temp1
$ echo "piyo" > temp2
$ paste -d" " temp1 temp2
hoge piyo
$ rm temp1 temp2
これを一時ファイル使わないよりスマートな方法でBash 3に対応するように書き換えたいのですが、どのようにすればよいでしょうか。
( echo "hoge"
echo "piyo"
の部分は実際にはより複雑なコマンドが入り、その出力には改行が含まれます)
結論:
どうやらmsys固有の問題のようです。
手元のmsys2(cygwinに近い)のbashでは動いたので使えるならそちらを使いましょう。
https://lists.gnu.org/archive/html/help-bash/2014-11/msg00046.html
動く:
$ bash --version
GNU bash, version 4.3.30(5)-release (x86_64-pc-msys)
Copyright (C) 2013 Free Software Foundation, Inc.
動かない:
$ bash --version
GNU bash, version 3.1.20(4)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.