CONTADOR=$(($CONTADOR+1)). . . . . . Comprender esta declaración en la programación de shell
Doble paréntesis (( ))
①Expansión de enteros. Este cálculo extendido es un cálculo de tipo entero y no admite tipos de punto flotante. La estructura ((exp)) expande y evalúa una expresión aritmética. Si la expresión se evalúa como 0, entonces el código de estado de salida devuelto es 1, o "falso", mientras que una expresión con valor distinto de cero devuelve el código de estado de salida. 0, o "verdadero". Si es un juicio lógico, la expresión exp es 1 si es verdadera y 0 si es falsa.
② Siempre que los operadores y expresiones entre paréntesis cumplan con las reglas de operación del lenguaje C, se pueden usar en $((exp)), incluso el operador ternario. Al realizar operaciones con diferentes bits de acarreo (como binario, octal y hexadecimal), los resultados de salida se convierten automáticamente a decimal. Por ejemplo: echo $((16#5f)) El resultado es 95 (convertir hexadecimal a decimal)
③ También puede redefinir el valor de la variable simplemente usando (( )), como a=5 ; ((a++) ) $a se puede redefinir como 6
④ Comúnmente utilizado para comparaciones aritméticas, las variables entre corchetes dobles no necesitan tener el prefijo $. Se admiten varias expresiones entre paréntesis separadas por comas. Siempre que la expresión entre paréntesis se ajuste a las reglas de operación del lenguaje C, por ejemplo, puede usar for((i=0;i<5;i++)) directamente. Si no usa corchetes dobles, será. para i en `seq 0 4` o para i en {0..4}. Para otro ejemplo, puede usar if (($i<5)) directamente. Si no usa corchetes dobles, es if [ $i -lt 5 ].
El ejemplo que dio es relativamente raro, porque solo agrega 1 a sí mismo, que es el método más problemático.
Común: a=1; let a++
a=1; ((a++))
En tu forma de escribir, no es necesario agregue variables entre corchetes dobles $, es decir:
CONTADOR=$((CONTADOR+1))
Si solo se usa un corchete, es equivalente a usar comillas invertidas ` `? para ejecutarlo como un comando, el resultado de la ejecución se asigna a la variable. Si Contador = 1, Contador = 1 + 1 después de la ejecución, no se realizará ninguna operación. a=1
a=($a+1)
echo?$a
1+1?//Este resultado no es lo que queremos