Fish Shell中等价性检查方法咨询(类似其他语言的==运算符)
在Fish Shell中做等价性检查的正确姿势
哈哈,太懂你这种误以为只能用contains凑活的无奈了!其实Fish Shell原生就支持直接的等价性判断,完全不用搞蹩脚的临时方案~
1. 字符串相等判断
最直接的就是用==运算符,配合test或者更简洁的[]语法都可以:
# 定义两个测试变量 set var1 "hello" set var2 "hello" # 写法1:用test命令 if test "$var1" == "$var2" echo "两个字符串完全相等!" end # 写法2:简化的[]语法(和test是等价的) if [ "$var1" == "$var2" ] echo "没错,就是相等的" end
如果你想要更明确的字符串操作,还可以用Fish的string命令家族里的string equal,语义更清晰,还支持额外选项:
# 普通相等判断 if string equal -- "$var1" "$var2" echo "完全匹配" end # 忽略大小写的相等判断 if string equal -i -- "Hello" "hello" echo "忽略大小写后相等" end
2. 数值相等判断
如果是要比较数字的等价性,就得用数值比较运算符-eq(equal的缩写),同样配合test或[]:
set num1 42 set num2 42 if test "$num1" -eq "$num2" echo "两个数值相等" end
对应的不等判断用-ne,大于用-gt,小于用-lt,这些都是标准的POSIX测试运算符,Fish完全支持。
为啥别用contains凑活?
你之前用contains的方案其实是歪打正着——contains的作用是检查某个元素是否存在于列表中,比如contains "apple" $fruit_list是判断apple是不是水果列表里的一项。如果用contains "$a" "$b",只有当$a和$b完全相等时才会返回真,但如果$b里包含空格,Fish会把它拆成多个列表元素,结果就完全不对了,而且语义上完全不是做等价性判断,很容易给后续维护埋坑。
内容的提问来源于stack exchange,提问作者Ace shinigami
相关产品推荐
相关产品推荐

