bash# hostname
host1.example.com
나는 호스트 1만을 원합니다. 그래서:
SHORT_HOST=$(/bin/hostname)
SHORT_HOST=${SHORT_HOST%%.*}
라이너로 바꿀 수 있나요? -또는- $SHORT_HOST를 읽기 전용으로 만들면서도 짧은 호스트 이름을 얻는 가장 좋은 방법은 무엇입니까?
답변1
bash 도구에만 국한되지 않는다면 시도해 보십시오.
SHORT_HOST=$(hostname | sed -e 's/\..*//')
또는
SHORT_HOST=$(hostname | cut -d. -f1)
답변2
귀하의 환경이 이를 지원하는 경우 간단히 다음을 수행할 수 있습니다.
typeset -r SHORT_HOST="$(/bin/hostname -s)"
답변3
이는 awk
명령을 사용하는 또 다른 방법입니다.
/bin/hostname | awk -F'.' '{print $1}'
SHORT_HOST 변수에 저장해야 하는 경우 다음 명령을 사용하십시오.
SHORT_HOST=$(/bin/hostname | awk -F'.' '{print $1}')
답변4
zsh 이외의 쉘에서는 값에 대해 여러 변환을 수행할 때마다 중간 할당을 수행해야 합니다.
물론 때로는 다음과 같은 몇 가지 해결책이 있습니다.후처리 없이 원하는 결과를 생성하는 명령 실행또는파이프라인을 통한 후처리외부 도구를 통해(파이핑된 솔루션은 속도가 느려지고 개행 문자가 깨질 위험이 더 커집니다.)
변수를 읽기 전용으로 만들려면 임시 변수에 할당하는 것이 더 깔끔할 수 있습니다.
tmp=$(/bin/hostname)
typeset -r SHORT_HOST="${tmp%%.*}"
Zsh(ksh 또는 bash 제외)는 중첩된 매개변수 대체를 지원합니다. 거기에 쓸 수 있습니다
typeset -r SHORT_HOST=${$(/bin/hostname)%%.*}