Paste コマンドは、プロセス置換と併用した場合、改行の代わりにタブを出力します。

Paste コマンドは、プロセス置換と併用した場合、改行の代わりにタブを出力します。

echo '1 2 3'以下の最初のコマンドは、別々の行に各数値を生成します。 2つの唯一の違いは、and echo {1..3}(両方とも同じ出力を生成します)を使用することであるため、2番目のコマンドも同じことをしたいと思います。ただし、2番目のコマンドは改行ではなくタブ区切りの数字を生成します。なぜ?

また、2番目のコマンドと3番目のコマンドの唯一の違いは、プロセス置換を介して結果を渡すことですpaste。ただし、そうでない場合は予想される結果が表示されます。これはpaste関連する問題かもしれませんが、何をよく理解していません。問題は。

§ paste <(echo '1 2 3' | tr ' ' '\t' | tr '\t' '\n')
1
2
3

§ paste <(echo {1..3} | tr ' ' '\t' | tr '\t' '\n')
1   2   3


§ echo {1..3} | tr ' ' '\t' | tr '\t' '\n'
1
2
3

プロセス交換パイプの端で生成された出力を見て、何が出力されているのか見てみましたが、実際には同じように見えました。

§ paste <(echo {1..3} | tr ' ' '\t' | tr '\t' '\n' | tee /dev/stderr) > /dev/null 
1
2
3

§ paste <(echo '1 2 3' | tr ' ' '\t' | tr '\t' '\n' | tee /dev/stderr) > /dev/null 
1
2
3

重要な場合、ツールのバージョンは次のとおりです。

§ which tr paste
/usr/local/opt/coreutils/libexec/gnubin/tr
/usr/local/opt/coreutils/libexec/gnubin/paste
§ tr --version
tr (GNU coreutils) 9.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.

Written by Jim Meyering.
§ paste --version
paste (GNU coreutils) 9.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.

Written by David M. Ihnat and David MacKenzie.
§ bash --version
bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin20)
Copyright (C) 2007 Free Software Foundation, Inc.
§ sw_vers
ProductName:    macOS
ProductVersion: 11.7.10
BuildVersion:   20G1427

私はmacOSを使用していますがbrew


アクティブなコメントで要求されたデバッグ情報を追加しますset -x

§ paste <(echo {1..3} | tr ' ' '\t' | tr '\t' '\n')
+ paste /dev/fd/63 /dev/fd/62 /dev/fd/61
++ echo 1
++ echo 3
++ tr ' ' '\t'
++ tr ' ' '\t'
++ tr '\t' '\n'
++ tr '\t' '\n'
++ echo 2
++ tr ' ' '\t'
++ tr '\t' '\n'
1   2   3
§ paste <(echo {1..3} | tr ' ' '\n')
+ paste /dev/fd/63 /dev/fd/62 /dev/fd/61
++ echo 1
++ tr ' ' '\n'
++ echo 2
++ echo 3
++ tr ' ' '\n'
++ tr ' ' '\n'
1   2   3
§ echo {1..3} | tr ' ' '\n' | paste
+ tr ' ' '\n'
+ echo 1 2 3
+ paste
1
2
3

そしてhexdump出力:

§ paste <(echo {1..3} | tr ' ' '\n') | hexdump -C
00000000  31 09 32 09 33 0a                                 |1.2.3.|
00000006
§ echo {1..3} | tr ' ' '\n' | paste | hexdump -C
00000000  31 0a 32 0a 33 0a                                 |1.2.3.|
00000006

関連情報