Pregunta:
Tratando de averiguar cómo convertir un argumento en un número entero para realizar operaciones aritméticas y luego imprimirlo, digamos para addOne.sh
:
echo $1 + 1
>>sh addOne.sh 1
prints 1 + 1
Respuesta:
En bash, uno no "convierte un argumento en un número entero para realizar operaciones aritméticas". En bash, las variables se tratan como enteros o cadenas según el contexto.
Para realizar operaciones aritméticas, debe invocar el operador de expansión aritmética $((...))
. Por ejemplo:
$ a=2
$ echo "$a + 1"
2 + 1
$ echo "$(($a + 1))"
3
o generalmente preferido:
$ echo "$((a + 1))"
3
Debe tener en cuenta que bash (a diferencia de ksh93, zsh o yash) solo realiza aritmética de enteros . Si tiene números de punto flotante (números con decimales), existen otras herramientas para ayudarlo. Por ejemplo, use bc
:
$ b=3.14
$ echo "$(($b + 1))"
bash: 3.14 + 1: syntax error: invalid arithmetic operator (error token is ".14 + 1")
$ echo "$b + 1" | bc -l
4.14
O puede usar un shell con soporte aritmético de punto flotante en lugar de bash:
zsh> echo $((3.14 + 1))
4.14