我有个问题
a=1 b=2
我想比较输出到一个变量。即在windows语言,你可以写这样的东西。它应该打印false
false
print ($a == $b)
在控制台中尝试以下这些。
echo $a -eq $b echo (( $a -eq $b )) echo "$a" -eq "$b" c= $(expr "$a" -eq "$b" ) echo $c
abithluo1#
可以使用算术展开。
echo $(( a == b ))
如果表达式为true,则输出1,如果表达式为false,则输出0。不需要在变量名前添加$,您可以像C语言一样使用运算符,并且可以省略空格。有关更多信息,请参阅Bash参考手册:Shell算术。让它打印字符串“true”或“false”有点棘手。通常我使用与@Inian相同的字符串,但使用if ... then .. else ... fi,因为我通常在set -euo pipefail下编写代码:
$
if ... then .. else ... fi
set -euo pipefail
if (( a == b )); then echo true; else echo false; fi
但我们可以聪明一点,做一个数组:
to_bool[0]="false" to_bool[1]="true" echo ${to_bool[ a == b ]}
但是我看不出打印0或1有什么区别。
0
1
kmynzznz2#
我不认为直接在bash中可以做到这一点。但是,您可以根据比较运算符的返回代码执行以下操作:
res=0; [ "$s1" == "$s2" ] && res=1 echo $res
它首先将res设置为零,然后仅当比较成功时才将res变量设置为1。或者,更简洁的内容如下:
res
[ $s1 -eq $s2 ]; echo $((!$?))
它实际上打印了先前执行的命令的返回代码。注意,! not操作符应用于返回代码,因为0通常意味着成功,即在这种情况下变量是相同的。
!
ezykj2lf3#
请注意,bash本身并不支持bool类型操作符。所有命令/内置程序都会根据其成功/失败状态向shell返回退出代码。向shell返回代码0意味着操作成功,任何非零值都表示失败。因此,在bash中,需要进行比较并显式设置bool字符串,类似于
bash
bool
[[ $a == $b ]] && echo true || echo false
注意,使用echo true不应与内置/bin/true和/bin/false混淆,它们分别显式地将shell的退出代码设置为0和1。echo语句只是打印出标准输出中提到的字符串。还要注意的是,[[是POSIX可用的[结构的shell关键字扩展。前者是添加到bourne again shell中的,可能在其他POSIX兼容的shell中 * 不可用 *。如果您正在寻找一种可移植的方式来做到这一点,请将[与case结构一起使用,如
echo true
/bin/true
/bin/false
echo
[[
[
case
[ "$a" -eq "$b" ] case $? in 0) printf '%s\n' "true" ;; *) printf '%s\n' "false" ;; esac
3htmauhk4#
如果你想posix-compliance:测试$a -ne $B &&打印'假';返回1
4条答案
按热度按时间abithluo1#
可以使用算术展开。
如果表达式为true,则输出1,如果表达式为false,则输出0。不需要在变量名前添加
$
,您可以像C语言一样使用运算符,并且可以省略空格。有关更多信息,请参阅Bash参考手册:Shell算术。让它打印字符串“true”或“false”有点棘手。通常我使用与@Inian相同的字符串,但使用
if ... then .. else ... fi
,因为我通常在set -euo pipefail
下编写代码:但我们可以聪明一点,做一个数组:
但是我看不出打印
0
或1
有什么区别。kmynzznz2#
我不认为直接在bash中可以做到这一点。
但是,您可以根据比较运算符的返回代码执行以下操作:
它首先将
res
设置为零,然后仅当比较成功时才将res
变量设置为1
。或者,更简洁的内容如下:
它实际上打印了先前执行的命令的返回代码。注意,
!
not操作符应用于返回代码,因为0
通常意味着成功,即在这种情况下变量是相同的。ezykj2lf3#
请注意,
bash
本身并不支持bool
类型操作符。所有命令/内置程序都会根据其成功/失败状态向shell返回退出代码。向shell返回代码0
意味着操作成功,任何非零值都表示失败。因此,在
bash
中,需要进行比较并显式设置bool
字符串,类似于注意,使用
echo true
不应与内置/bin/true
和/bin/false
混淆,它们分别显式地将shell的退出代码设置为0
和1
。echo
语句只是打印出标准输出中提到的字符串。还要注意的是,
[[
是POSIX可用的[
结构的shell关键字扩展。前者是添加到bourne again shell中的,可能在其他POSIX兼容的shell中 * 不可用 *。如果您正在寻找一种可移植的方式来做到这一点,请将[
与case
结构一起使用,如3htmauhk4#
如果你想posix-compliance:
测试$a -ne $B &&打印'假';返回1