한 줄로 명령을 실행한 후 매개변수를 대체합니다.

한 줄로 명령을 실행한 후 매개변수를 대체합니다.
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)%%.*}

관련 정보