予期しない表示'('の近くに構文エラーがあります.

予期しない表示'('の近くに構文エラーがあります.
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

おすすめ記事