Como Arushix aponta , um dos problemas com o código é que read
divide a entrada em os valores na variável do shell IFS
(espaço, tabulação e nova linha por padrão).
No entanto, não posso deixar de notar que você está analisando as variáveis no arquivo original várias vezes; primeiro pelo primeiro script awk
e, em seguida, novamente com read
e, finalmente, uma terceira vez com echo
+ awk
. Cada uma dessas etapas pode lançar seu próprio conjunto de erros.
Se você quiser apenas validar as atribuições de variáveis e imprimir os pares chave / valor:
if ! awk -F '=' 'NF != 2 { exit 1 } { printf("key: %s | value: %s\n", $1, $2) }' "$conffile"; then
echo 'Failed' >&2
exit 1
fi
Dado o arquivo de entrada
VAR1=VAL1
VAR2=VAL2
VAR3=VAL3
VAR4=VAL4
Isso imprimirá
key: VAR1 | value: VAL1
key: VAR2 | value: VAL2
key: VAR3 | value: VAL3
key: VAR4 | value: VAL4
Com uma linha extra lendo apenas BOO
no final do arquivo de entrada, a saída seria
key: VAR1 | value: VAL1
key: VAR2 | value: VAL2
key: VAR3 | value: VAL3
key: VAR4 | value: VAL4
Failed
Além de NF == 2
, você pode querer incluir uma verificação de nomes de variáveis válidos, etc:
if ! awk -F '=' 'NF != 2 || $1 !~ /^[A-Za-z][A-Za-z0-9]+$/ { exit 1 } { printf("key: %s | value: %s\n", $1, $2) }' "$conffile"; then
echo 'Failed' >&2
exit 1
fi