명령의 일부로 하위 쉘 명령을 실행할 때마다 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
므로 o
of 만 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
?