Script Bash como aceitar um número de dígito único ou duplo e torná-lo 2 dígitos

1

Eu tenho um extrato simples do meu script que é estranhamente preso para uma entrada específica.

echo -e "Enter the Day of the Month : \c "
    read input_day
    printf -v input_day '%02d' "$input_day"

Isso garante que, se o usuário inserir um número de dígito único, por exemplo, 2 então ele converte para 02. Qual é o meu primeiro requisito. Isso também funciona se você inserir um número de 2 dígitos como 02. Em seguida, ele reterá como 02. Isso também funciona para um número de 2 dígitos como 12. Mas estranhamente não aceita o dígito 08 e 09? Este é o erro que dá quando se entra 08 ou 09.

Enter the Day of the Month : 08
2: line 20: printf: 08: invalid number

Por que isso acontece? Eu tentei ler a página de ajuda printf e mostra que "d" significa inteiro decimal assinado. Por isso, deve aceitar os dígitos 8 e 9. Ou estou faltando alguma coisa? Meu requisito é que o usuário possa inserir o dia do mês como dígito único "8" e dígito duplo "08".

    
por Sachin H 08.03.2016 / 10:47

1 resposta

1

bash interpretará um número com um zero inicial como octal. O formato não é o problema, a variável $input_day é o problema.

Você pode removê-los com vários métodos (veja, por exemplo, awk equivalente da função LTRIM em C ).

Leitura adicional:

A propósito, o exemplo não verifica se a variável está vazia. Mas validar isso corretamente seria outra questão.

    
por 08.03.2016 / 11:08