Bashでは、現在の作業ディレクトリを変数に割り当てます。サブシェルを使用して、これを行うことができます。
var=$(pwd)
echo $var
/home/user.name
このようにプロセス置換を使用する場合:
var=<(pwd)
echo $var
/dev/fd/63
プロセス置換は、プログラムがSTDINを受け入れない場合に主に使用されることを理解しました。プロセス置換が正確に何を行うのか、なぜ/dev/fd/63
をvar
に割り当てるのかは不明です。
コマンド置換($(...)
)は、コマンドの出力に置き換えられますが、プロセス置換(<(...)
)はファイル名コマンドの出力を読み取ることができるファイル。どちらの場合も、コマンドはサブシェルで実行されます。
あなたの場合、<(pwd)
のpwd
からの出力は/dev/fd/63
にあります。このファイルは、使用コマンド置換の実行が完了するとすぐに存在しなくなります(例のecho
が完了すると)。
プロセス置換によって返されるファイル名は、通常のファイルではなく、ファイル記述子または名前付きパイプの名前です。
プロセス置換は、名前付きパイプ(FIFO)または
/dev/fd
メソッドをサポートするシステムで、開いているファイルに名前を付けることでサポートされます。
プロセス置換の一般的な使用法は、join
コマンドのファイルを事前にソートすることです。
$ join <( sort file1 ) <( sort file2 )
または、ファイルから列を削除する場合(ここで、列2は、タブ区切りファイルからcut
を2回使用し、paste
を使用して結果を結合することにより削除されます):
$ paste <( cut -f 1 file ) <( cut -f 3- file )
プロセス置換は、一時ファイルを明示的に使用しないようにするための構文上のショートカットです。
コマンド置換とプロセス置換の両方がサブシェルで実行されます。
$ echo $( t=1234; echo $t )
1234
$ echo $t
(no output)
ここで、echo
は、コマンド置換から文字列引数として1234
を取得します。
$ cat <( t=4321; echo $t )
4321
$ echo $t
(no output)
ここでは、cat
はファイルのファイル名(名前付きパイプ/ファイル記述子)を引数として取得します。ファイルにはデータ4321
が含まれています。