bash 中参数字符串到整数

bash 中参数字符串到整数

试图弄清楚如何将参数转换为整数以执行算术,然后将其打印出来,例如addOne.sh

echo $1 + 1
>>sh addOne.sh 1
prints 1 + 1

答案1

在 bash 中,人们不会“将参数转换为整数以执行算术”。在 bash 中,变量根据上下文被视为整数或字符串。

(如果您在整数上下文中使用变量,那么显然该变量最好包含看起来像有效整数的字符串。否则,您将收到错误。)

要执行算术运算,您应该调用算术扩展运算符$((...))。例如:

$ a=2
$ echo "$a + 1"
2 + 1
$ echo "$(($a + 1))"
3

或通常首选:

$ echo "$((a + 1))"
3

您应该知道 bash(与 ksh93、zsh 或 yash 相对)仅执行整数算术。如果您有浮点数(带小数的数字),那么还有其他工具可以提供帮助。例如,使用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

或者您可以使用支持浮点算术的 shell 来代替 bash:

zsh> echo $((3.14 + 1))
4.14

答案2

其他方式,你可以使用expr

前任:

$ version="0002"
$ expr $version + 0
2
$ expr $version + 1
3

答案3

在 中bash,您可以使用以下命令执行从任意值到整数的转换printf -v:

printf -v int '%d\n' "$1" 2>/dev/null

浮点数将被转换为整数,而任何看起来不像数字的数字将被转换为 0。求幂将被截断为之前的数字e

例子:

$ printf -v int '%d\n' 123.123 2>/dev/null
$ printf '%d\n' "$int"
123
$ printf -v int '%d\n' abc 2>/dev/null
$ printf '%d\n' "$int"
0
$ printf -v int '%d\n' 1e10 2>/dev/null
$ printf '%d\n' "$int"
1

答案4

根据bash 文档,算术表达式求值的语法是$((expression))。例如:

$ n=1
$ echo $((n+1))
2

您可以通过将参数分配给变量,然后使用算术扩展在脚本中使用它:

n=$1
echo $((n+1))

测试一下:

$ bash ./test.sh 1
2
$ bash ./test.sh 7
8

相关内容