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