명령 확장에 대한 Bash 매뉴얼의 결과
포함된 개행 문자는 제거되지 않지만 단어 분리 중에 제거될 수 있습니다.
예를 들어
$ cat myfile
1
2
3
$ echo $(cat myfile)
1 2 3
왜 포함된 개행 문자가 공백으로 바뀌는지 궁금합니다. 설명서에는 그렇게 적혀 있지 않나요?
답변1
Bash(및 기타 많은 쉘)에서 $()
명령의 출력을 가져와 다른 명령의 인수로 사용하는 데 사용됩니다.
여기에서 수행되는 작업은 다음과 같습니다.
먼저 실행하십시오 cat
.
1
2
3
그런 다음 $()
해당 블록을 다음으로 바꾸십시오.
echo 1
2
3
이제 쉘은 이 입력을 해석하고 올바른 매개변수를 보내야 합니다 echo
. 이를 위해서는 분할해야 합니다. 1
즉 2
, 3
여기에서 개행 문자가 제거됩니다.
마지막으로 쉘은 다음을 보냅니다.
프로그램:echo
논쟁:1
2
3
그러면 다음과 같은 내용이 표시됩니다.
1 2 3
echo
매개변수가 여러 개인 경우 모든 매개변수를 공백으로 구분하여 표시하기 때문입니다 .