当前位置:网站首页>如何在 Bash 中将字符串计算为数字?
如何在 Bash 中将字符串计算为数字?
2022-04-22 04:26:00 【wljslmz】
就像 Linux 中的一切都是文件一样,bash 中的一切都是字符串。
从技术上讲,Bash 中没有数据类型,本质上,Bash 变量只是字符串。
当您尝试在 bash 中进行算术运算时,这会产生问题,您尝试添加的数字会给您带来奇怪的结果。
ywmt@wljslmz:~$ sum=3+6
ywmt@wljslmz:~$ echo $sum
3+6
要在 bash 中将字符串转换为整数,请将它们包装在 $((X)) 中,像这样:
$((string))
如果字符串有一个可识别的数字,它将被视为一个数字,我上面显示的示例可以更正为:
ywmt@wljslmz:~$ sum=$((3+6))
ywmt@wljslmz:~$ echo $sum
9
您在 $((…)) 中所做的任何事情都被认为是算术运算。
让我们更详细地看一下字符串到数字的转换,以便您可以在 bash 中使用算术计算。
将字符串变量转换为数字
让我们声明一些基本上是字符串的“数字”。
ywmt@wljslmz:~$ a=11
ywmt@wljslmz:~$ b=3
您可以检查分配的号码:
ywmt@wljslmz:~$ echo $a
11
vimanyu@wljslmz:~$ echo $b
3
现在让我们尝试将两个数字相加并将值存储在第三个变量中c:
ywmt@wljslmz:~$ c=$a+$b
ywmt@wljslmz:~$ echo $c
11+3
正如您在上面的输出中看到的,c 也被视为字符串。
要使加法成功,您需要通过算术展开“转换”它:
ywmt@wljslmz:~$ c=$(($a+$b))
ywmt@wljslmz:~$ echo $c
14
请注意,c它实际上仍然是一个字符串,直到您再次隐式使用相同的算术扩展来进行我稍后将讨论的另一个操作。
ywmt@wljslmz:~$ c=$((5))
以上等价于:
ywmt@wljslmz:~$ c=5
d让我们为另一个操作使用第三个变量:
ywmt@wljslmz:~$ d=10
所有这些隐式声明仍然是字符串。这与我之前定义的方式a相同b。
现在进行第二次操作:
ywmt@wljslmz:~$ e=$(($a+$b*$c-$d))
ywmt@wljslmz:~$ echo $e
16
在上面的表达式中,首先计算 b 和 c 的乘积,最后计算加法和减法。
正如我之前提到的,您在 $((…)) 之间所做的任何事情都被认为是算术运算。
所有这些转换都适用于整数。它不适用于浮点数,即带小数点的数字。
尝试混合实际的字符串和数字
混合字符串和整数仍然比混合可乐和薄荷更安全。不过,它确实会产生一个奇怪的结果。
ywmt@wljslmz:~$ sum=$((3+hello))
ywmt@wljslmz:~$ echo $sum
3
它仅在有数字(作为字符串)时才有效,如果是纯字符串,就不会神奇地转换成一些数字,相反,它会被忽略,如您在上面的示例中所见。
替代方法:使用 expr
您也可以使用该expr工具进行评估,但请注意它不是“本机” Bash 程序,因为您需要coreutils安装(默认情况下在 Ubuntu 上)作为单独的包。
ywmt@wljslmz:~$ expr $a + $b \* $c - $d
16
版权声明
本文为[wljslmz]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43025343/article/details/124334440
边栏推荐
- [logical fallacies in life] right for people, wrong for things and dilemma trap
- 搜索内容入库
- C entry - check the ID number with regular expressions.
- Rsync remote synchronization
- 【近日力扣】斐波那契数列+用两个栈实现队列+从尾到头打印链表
- Revit (3) - 二开 -创建柱子
- Reenter leetcode (392. Judgment subsequence)
- When calling a function, what about passing parameters~
- L1-050 penultimate string (15 points)
- Tensorflow error: returned a result with an error set solution
猜你喜欢

交通行業提昇數據利用效率的核心是做好數據交換與共享

sqlilabs(25a-26)

软件测试成行业“薪”贵?

Your mind will change your behavior, and your behavior will change your situation

Release announcement of HMS core version 6.4.0

交通行业提升数据利用效率的核心是做好数据交换与共享

05-Aggregation

01 knapsack problem (two-dimensional array solution and one bit array optimization)

When the SQL statement is executed by hyperf, the parameter will have two single quotes

01背包问题(二维数组解法以及一位数组优化)
随机推荐
sqlilabs(25a-26)
Sequence traversal of binary tree
JVM简记
Tencent CSIG interview brief (passed)
【openEuler】Failed to download metadata for repo ‘EPOL‘: Cannot d
高斯分布——在误差测量中的推导
jeesite导出Excel
Keras深度学习实战(2)——使用Keras构建神经网络
SR-TE Policy(思科)----补充
【近日力扣】(位运算合集)不用加减乘除做加法+只出现一次的数字+只出现一次的数字 II+只出现一次的数字 III
XSS attack principle / classification / defense of Web Security
[recent force deduction] Fibonacci sequence + realizing queue with two stacks + printing linked list from end to end
【近日力扣】斐波那契数列+用两个栈实现队列+从尾到头打印链表
交通行業提昇數據利用效率的核心是做好數據交換與共享
Teach you to develop an image compression tool on the cloud
Anaconda related
Tensorflow error: returned a result with an error set solution
Matplotlib draw 3dbox
matplotlib画3dbox
【Taro开发】-全局自定义导航栏适配消息通知框位置及其他问题(十四)