이 줄을 디코딩해야 합니다. {$HOSTNAME^^} == {$arrName^^}

이 줄을 디코딩해야 합니다. {$HOSTNAME^^} == {$arrName^^}

다음은 내 조직의 누군가가 작성한 쉘 스크립트의 일부입니다.

while read -r line
do
    #split if needed
    arrName=$(echo $line | cut -d"." -f1)
    if [ {$HOSTNAME^^} == {$arrName^^} ]; then
        echo "Perfect $arrName"
        echo "$1" >> $TEMPFILE
    fi
done < compuetrnames.txt

이 줄을 제외하고는 전체 스크립트를 이해할 수 있습니다.

if [ {$HOSTNAME^^} == {$arrName^^} ]; then

누군가 이 줄을 이해하도록 도와줄 수 있나요?

답변1

${variable^^}변수 값을 대문자로 변환하는 Bash 4.x 매개변수 확장입니다.

달러 기호는 여는 중괄호 앞에 와야 하며 뒤에 와야 합니다.

(잘못 인용된) echo | cut파이프는 인수 확장을 사용하여 유사하게 작성하거나 ...를 사용하여 읽는 동안 첫 번째 마침표에서 즉시 입력을 분할 ${line%%.*}할 수 있습니다.while IFS='.' read line _; do

답변2

Bash의 대체는 ${parameter^^pattern}와일드카드 패턴과 일치하는 문자의 대소문자를 대문자로 변경합니다.$parameterpattern

패턴이 없으면 의 모든 문자의 대소문자가 변경됩니다 $parameter.

Tripleee가 그의 답변에서 지적했듯이 {$...}구문 오류이거나 오히려 값이 {$HOSTNAME^^}문자열로 확장된 경우입니다.{hostname^^}$HOSTNAMEhostname

관련 정보