echo \"$(hostname -I)\"가 마지막 숫자 뒤에 공백을 표시하는 이유는 무엇입니까? 이 상황을 피하는 방법은 무엇입니까?

echo \"$(hostname -I)\"가 마지막 숫자 뒤에 공백을 표시하는 이유는 무엇입니까? 이 상황을 피하는 방법은 무엇입니까?

echo \"$(hostname -I)\""111.111.111 " 추가 공간을 피하고 출력을 다음으로 변경하려면 어떻게 해야 합니까?"111.111.111"

답변1

명령이 공백을 인쇄하면 출력에 포함됩니다. 음, 실제로는 명령 대체가 인용되지 않았기 때문에 결과가 토큰화되고 두 문자열 "111.111.111과 합계가 두 개의 다른 인수로 전달된 "다음 단일 공백으로 연결되어 인쇄됩니다. 여기서는 출력이 변경되지 않지만 다른 많은 경우에는 중요합니다. 명령 교체 후 아무것도 없으면 단어 분할 과정에서 공백이 사라집니다.echoechoecho

여러 IP 주소를 인쇄할 수 있으므로 hostname -I후행 공백을 인쇄할 가능성이 높으며 마지막 공백을 건너뛰는 것보다 각 IP 주소 뒤에 공백을 인쇄하는 것이 더 간단합니다.

공백을 제거하려면 접미사 제거 확장을 사용할 수 있습니다.

ip="$(hostname -I)"
ip="${ip% }"
printf '"%s"\n' "$ip"

또는 분사를 활용해 보세요:

printf '"%s"\n' $(hostname -I)

후자는 공백으로 구분된 각 IP 주소를 개별적으로 인용하고 한 줄에 하나씩 인쇄합니다.

관련 정보