算術における変数の比較

算術における変数の比較

誰もが時間をかけて次のことを説明できるかどうか疑問に思います。

配列に配置されたファイルディレクトリ(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
}

私の問題は、Googleで見つけた関数のこの減少です。

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

2つの変数を比較するように指定する必要がないのはなぜですか?このように、

(($name> $HighestNum))&&トップ番号= $name

ご協力ありがとうございます。

ベストアンサー1

((...))その理由は、これが特別な場合だからです。算術演算を実行します。中のテキストは役に立ちません((...))。したがって、簡単に言えば、内部のすべての名前は((...))シェル変数を参照すると仮定されます。

その結果、次の2つのタスクは同じことを行います。

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

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

おすすめ記事