하위 프로세스가 포함된 에코가 예기치 않은 출력을 생성합니다.

하위 프로세스가 포함된 에코가 예기치 않은 출력을 생성합니다.

명령의 일부로 하위 쉘 명령을 실행할 때마다 echo출력에서 ​​이상한 결과가 생성되는 것을 발견했습니다. 이것이 Unix 쉘의 작동 방식에 대한 나의 이해 부족이라고 확신하지만, 뒤에서 무슨 일이 일어나고 있는지, 그리고 이 사용 사례를 처리하는 적절한 방법은 무엇인지에 대해 설명해 주시면 정말 감사하겠습니다.

$ cat two
two

$ echo "one $(cat two) three"
threeo

나는 one two three출력으로 기대한다

고쳐 쓰다

파일이 two이전에 사용되었기 때문에 위의 잘못된 예에 대해 사과드립니다 curl -I. 문맥의 일관성을 유지하기 위해 아래가 더 적절한 예입니다.

$ curl -sI https://google.com | grep server | cut -d " " -f 2
gws

$ echo "one $(curl -sI https://google.com | grep server | cut -d " " -f 2) three"
threes

위에서 언급했듯이 예상되는 결과는 다음과 같습니다.one gws three

답변1

파일 two에 캐리지 리턴 문자가 있을 수 있습니다 .

one two표시되는 출력이 겹치는 것처럼 보이 three므로 oof 만 two표시됩니다.

two원하는 결과를 얻기 위해 정리해야 할 사항 .

예를 들어:

echo "one $(tr -d '\r' < two) three"

답변2

여기서는 모든 것이 잘 작동합니다.

$ echo -n two > two
$ echo "one $(cat two) three"
one two three

의 출력은 무엇입니까 ls -l two?

관련 정보