erro de sintaxe próximo ao token inesperado '('

1
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))))

Para rhel_release_code, recebo um erro de sintaxe

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)))'

Alguma ideia do motivo pelo qual esse erro ocorreu?

    
por vck5 28.02.2016 / 04:26

1 resposta

1

bash gera um erro porque não é um código de shell válido. (Também não é válido awk code.)

Tente isso

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))

Se você não deseja realmente os valores de $rhel_major e $rhel_minor , é possível calcular $rhel_release diretamente em uma etapa usando awk .

    
por 28.02.2016 / 09:53