2011-01-20 8 views

Respuesta

22

No hay necesidad de expr, shell POSIX permite $(()) para la evaluación de la aritmética:

echo $((x+1)) 

Ver §2.6.4

1

tratar echo $ (($ x + 1))

creo que sólo funciona en alguna versión de bash que es 3 o más ..

echo `expr $x + 1` 

sería otra solución

+0

Como se ha mencionado en mi respuesta, '$ (())' es en realidad compatible con POSIX, no un bash'ism. – SiegeX

0

sólo tiene que utilizar el comando expr:

$ expr $x + 1 
8 
0

Utilizamos expr para ello:

echo `expr $x + 1` 
0

Trate de esta manera:

echo $(($X + 1)) 
3

Trate doble paréntesis:

$ x=7; echo $(($x + 1)) 
8 
0
$ echo $(($x+1)) 
8 

De man bash:

expansión aritmética

expansión aritmética permite la evaluación de una expresión aritmética y la sustitución del resultado. El formato para la expansión aritmética es:

$((expression)) 

La expresión es tratado como si fuera dentro de dobles comillas, pero comillas dobles dentro de los paréntesis no es especialmente tratado. Todos los tokens en la expresión se someten a la expansión del parámetro , expansión de cadena, sustitución de comando, y eliminación de comillas. Las sustituciones aritméticas pueden estar anidadas.

La evaluación se realizó de acuerdo con las normas enumeradas a continuación bajo ARITHMETIC evaluación. Si la expresión es no válida, bash imprime un mensaje que indica la falla y no se produce la sustitución .

+2

No hay necesidad de prefijar vars con un '$' dentro '(())' – SiegeX

3

También puede utilizar la utilidad de bc:

$ x=3; 
$ echo "$x+5.5" | bc 
8.5 
+0

+1 para bc !!!!! –

Cuestiones relacionadas