echo command não dando saída correta

2

Eu tento criar saída como 12DEC2013bhav.csv.zip no script abaixo.

Mas está me dando algo como 12DEC.csv.zip :

for (( i = 2013; i <= 2014; i++ ))
do
    for m in JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
    do
        for (( d = 1; d <= 31; d++))
        do
            echo "$d$m$ibhav.csv.zip"
        done
    done
done

Como corrijo isso?

    
por Kuldeep Kumar 22.08.2014 / 09:06

1 resposta

6

O problema é que você está tentando fazer referência a uma variável chamada $ibhav (não $i ).

As variáveis podem ter mais de um caractere e, no seu exemplo, o shell não tem como saber se você quis dizer $i ou $ibhav (ou $ibha ou $ibh ou $ib ).

A correção é colocar os nomes das variáveis em parêntesis:

echo "${d}${m}${i}bhav.csv.zip"

para que não seja ambíguo qual variável você está referenciando.


De man bash :

   Parameter Expansion
        The '$' character introduces parameter expansion, command substitution, or
        arithmetic expansion.  The parameter name or symbol to be expanded may  be
        enclosed  in  braces, which are optional but serve to protect the variable
        to be expanded from characters immediately following  it  which  could  be
        interpreted as part of the name.

        When  braces  are  used,  the  matching  ending brace is the first '}' not
        escaped by a backslash or within a quoted string, and not within an embed‐
        ded arithmetic expansion, command substitution, or parameter expansion.

        ${parameter}
               The  value  of  parameter  is substituted.  The braces are required
               when parameter is a positional parameter with more than one  digit,
               or  when  parameter  is  followed by a character which is not to be
               interpreted as part of its name.  The parameter is a shell  parame‐
               ter as described above PARAMETERS) or an array reference (Arrays).
    
por Jeremy Kerr 22.08.2014 / 09:11