예기치 않은 표시 '(' 근처에 구문 오류가 있습니다.

예기치 않은 표시 '(' 근처에 구문 오류가 있습니다.
rhel_major=$(grep -Eoh [0-9]+\.[0-9]+ /etc/{issue,*release} | head -1 | awk -F'.' '{ print $$1 }')
rhel_minor=$(grep -Eoh [0-9]+\.[0-9]+ /etc/{issue,*release} | head -1 | awk -F'.' '{ print $$2 }')
rhel_release_code=$(echo $$(($(rhel_major) << 8 | $(rhel_minor))))

rhel_release_code의 경우 구문 오류가 발생합니다.

rhel_release_code=$(echo $$(("$(rhel_major)" << 8 | $(rhel_minor))))

-bash: command substitution: line 1: syntax error near unexpected token `('
-bash: command substitution: line 1: `echo $$(("$(rhel_major)" << 8 | $(rhel_minor)))'

왜 이 오류가 발생하는지 아시나요?

답변1

bash유효한 쉘 코드가 아니기 때문에 오류가 발생합니다. (이 역시 유효한 코드가 아닙니다 awk.)

이 시도

rhel_major=$(grep -Eoh '[0-9]+\.[0-9]+' /etc/{issue,*release} | awk -F'.' '{ print $1; exit }')
rhel_minor=$(grep -Eoh '[0-9]+\.[0-9]+' /etc/{issue,*release} | awk -F'.' '{ print $2; exit }')
rhel_release_code=$((rhel_major << 8 | rhel_minor))

$rhel_major실제로 합계 값이 필요하지 않은 경우 직접 1단계 계산을 사용할 $rhel_minor수 있습니다 .$rhel_releaseawk

관련 정보