试图弄清楚如何将参数转换为整数以执行算术,然后将其打印出来,例如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