比较算术中的变量

比较算术中的变量

想知道是否有人可以花时间解释以下内容:

我有一个文件目录(PDF),我将其放入一个数组中。

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

在我的测试中,数组包含以下内容。

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

我创建了以下函数来派生下一个要创建的文件

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
}

我的问题是我通过谷歌找到的函数中的这一行。

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

为什么不必指定正在比较两个变量?像这样,

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

感谢您的帮助。

答案1

原因是这((...))是一个特殊情况。它执行算术运算。里面的文字没有用((...))。因此,作为快捷方式,内部的任何名称((...))都被假定为引用 shell 变量。

结果,以下两个做了同样的事情:

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

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

相关内容