bash - 小于运算符的行为与 BASH 中的 -le 有何不同?
问题描述
#!/bin/bash
a=10
b=30
[ $a -eq $b ]
echo $?
echo $(($a==$b))
此代码输出 1 然后 0。为什么 $(($a==$b)) 输出 0?
我已经用 -le 和 < 也试过了。
[ $a -le $b ] 输出 0
$(($a < $b)) 输出 1
我同时使用了 ksh 和 bash 来检查
解决方案
您无法将$?
一个操作的输出与另一个操作的输出进行比较。这些是不同的东西,因为退出状态成功为 0,非零结果反映失败,但在数字上下文中(例如$(( ))
进入),真值为 1,失败为 0。
将您的测试与:
#!/bin/bash
a=10
b=30
[ "$a" -eq "$b" ]
echo "Exit status using -eq: $?"
(( a == b ))
echo "Exit status using (( )): $?"
输出正确:
Exit status using -eq: 1
Exit status using (( )): 1
我对引号、 s 等所做的更改(除了从 切换$(( ))
到)是对您当前数据的修饰——它们可能会用意外的值改变行为,所以我建议在您的代码中使用这些做法,但它们实际上并没有修改立即输出。(( ))
$
推荐阅读
- angular - 如何将 typescript-eslint 规则添加到 eslint
- azure-active-directory - 使用 ASP.NET Core Blazor WebAssembly 的图形 API
- linux - Linux Kernel API:sysfs中`/sys/devices/pci...`树下节点的意义和稳定性
- react-native - Api 调用仅在 react-native redux 中第一次发生
- javascript - 如何动态填充表格中的单元格?
- python - Django Html 输入字段 > 字符
- mysql - 选择,在不同值的过渡之间创建空行
- php - 无法登录到 Mautic 仪表板
- arrays - 如何在 C 中创建带有结构元素的数组?
- python - 为什么我的路径与 A Star 算法中的启发式函数方向相反?