想知道是否有人可以花时间解释以下内容:
我有一个文件目录(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