Paste 명령은 프로세스 대체와 함께 사용될 때 개행 대신 탭을 출력합니다.

Paste 명령은 프로세스 대체와 함께 사용될 때 개행 대신 탭을 출력합니다.

echo '1 2 3'아래의 첫 번째 명령은 별도의 줄에 각 숫자를 생성합니다. 둘 사이의 유일한 차이점은 and echo {1..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

관련 정보