Comparando variáveis na aritmética

1

Estava se perguntando se alguém pode dedicar um tempo para explicar o seguinte:

Eu tenho um diretório de arquivos (PDF), que eu coloco em uma matriz.

shopt -s nullglob                                   # Set array to 0 is nothing found=
declare -a TotalFiles=($Prefix*.pdf)                # Current listing of files
TotalFileCount=${#TotalFiles[@]}

No meu mesting, o array contém o seguinte.

Array Contents Scan-0030.pdf Scan-0140.pdf Scan-0005.pdf Scan-0006.pdf Scan-0007.pdf Scan-0008.pdf Scan-0009.pdf Scan-0010.pdf

Eu criei as seguintes funções para derivar o próximo arquivo a ser criado

function NextNum {
    HighestNum =0
    echo "NextNumber Functions"

    #for index in "${TotalFiles[*]}"
    for file in ${!TotalFiles[*]}
    do
        #printf "%4d: %s\n" $index $TotalFiles ${array[$index]}
        echo $file ${TotalFiles[$file]}

        name=${TotalFiles[$file]}
        name=${name//[^0-9]/}
        name=$((10#$name))

        echo "File number in  name  - $name"
        echo $file
        TotalFiles[$file]=$name

        **((name > HighestNum)) && HighestNum=$name**
    done
}

Minha pergunta é com essa linha na função que encontrei por googleling.

((name > HighestNum)) && HighestNum=$name

Como é que não é necessário especificar que duas variáveis estão sendo comparadas? assim,

(($ name > $ HighestNum)) & & HighestNum = $ name

obrigado pela ajuda.

    
por user68650 12.02.2015 / 04:09

1 resposta

1

A razão é que ((...)) é um caso especial. Realiza aritmética. Não há uso para o texto dentro de ((...)) . Assim, como um atalho, qualquer nome dentro de ((...)) é considerado como uma variável de shell.

Como resultado, os dois seguintes fazem a mesma coisa:

$ a=1; b=2; ((c=$a+$b)); echo $c
3

$ a=1; b=2; ((c=a+b)); echo $c
3
    
por 12.02.2015 / 04:16