![echo \"$(hostname -I)\"가 마지막 숫자 뒤에 공백을 표시하는 이유는 무엇입니까? 이 상황을 피하는 방법은 무엇입니까?](https://linux55.com/image/221539/echo%20%5C%22%24(hostname%20-I)%5C%22%EA%B0%80%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%88%AB%EC%9E%90%20%EB%92%A4%EC%97%90%20%EA%B3%B5%EB%B0%B1%EC%9D%84%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%EC%9D%B4%20%EC%83%81%ED%99%A9%EC%9D%84%20%ED%94%BC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
echo \"$(hostname -I)\"
"111.111.111 "
추가 공간을 피하고 출력을 다음으로 변경하려면 어떻게 해야 합니까?"111.111.111"
답변1
명령이 공백을 인쇄하면 출력에 포함됩니다. 음, 실제로는 명령 대체가 인용되지 않았기 때문에 결과가 토큰화되고 두 문자열 "111.111.111
과 합계가 두 개의 다른 인수로 전달된 "
다음 단일 공백으로 연결되어 인쇄됩니다. 여기서는 출력이 변경되지 않지만 다른 많은 경우에는 중요합니다. 명령 교체 후 아무것도 없으면 단어 분할 과정에서 공백이 사라집니다.echo
echo
echo
여러 IP 주소를 인쇄할 수 있으므로 hostname -I
후행 공백을 인쇄할 가능성이 높으며 마지막 공백을 건너뛰는 것보다 각 IP 주소 뒤에 공백을 인쇄하는 것이 더 간단합니다.
공백을 제거하려면 접미사 제거 확장을 사용할 수 있습니다.
ip="$(hostname -I)"
ip="${ip% }"
printf '"%s"\n' "$ip"
또는 분사를 활용해 보세요:
printf '"%s"\n' $(hostname -I)
후자는 공백으로 구분된 각 IP 주소를 개별적으로 인용하고 한 줄에 하나씩 인쇄합니다.