在Fish中如何比较两个字符串(类似于其他语言中的"abc" == "def"
)?
到目前为止,我使用了contains
的组合(结果发现contains "" $a
只有当$a
为空字符串时才返回0
,但在某些情况下这似乎对我没用)和switch
(使用case "要匹配的内容"
和case '*'
)。然而,这些方法都不是特别正确。
在Fish中如何比较两个字符串(类似于其他语言中的"abc" == "def"
)?
到目前为止,我使用了contains
的组合(结果发现contains "" $a
只有当$a
为空字符串时才返回0
,但在某些情况下这似乎对我没用)和switch
(使用case "要匹配的内容"
和case '*'
)。然而,这些方法都不是特别正确。
if [ "abc" != "def" ]
echo "not equal"
end
not equal
if [ "abc" = "def" ]
echo "equal"
end
if [ "abc" = "abc" ]
echo "equal"
end
equal
或者一行代码:if [ "abc" = "abc" ]; echo "equal"; end
equal
=
让我困惑了。 - Daisy Leigh Brenecki[
实际上是test
命令的快捷方式,]
是告诉test
停止读取参数的参数。如果没有空格,则[
不会被解释为命令和/或]
不存在作为参数。 - BallpointBen[
之间的空格让我疯狂了。幸运的是你指出了它。你救了我的一天,兄弟! - LeOn - Han Litest
的手册提供了一些有用的信息。可以通过 man test
命令来获取。
Operators for text strings
o STRING1 = STRING2 returns true if the strings STRING1 and STRING2 are identical.
o STRING1 != STRING2 returns true if the strings STRING1 and STRING2 are not
identical.
o -n STRING returns true if the length of STRING is non-zero.
o -z STRING returns true if the length of STRING is zero.
例如。set var foo
test "$var" = "foo" && echo equal
if test "$var" = "foo"
echo equal
end
您还可以使用[
和]
代替test
。
以下是检查在fish中falsy的空字符串或未定义变量的方法。
set hello "world"
set empty_string ""
set undefined_var # Expands to empty string
if [ "$hello" ]
echo "not empty" # <== true
else
echo "empty"
end
if [ "$empty_string" ]
echo "not empty"
else
echo "empty" # <== true
end
if [ "$undefined_var" ]
echo "not empty"
else
echo "empty" # <== true
end
[
实际上是一个命令(在OS X上是/bin/[
),同时也是Bash的内置命令,具有不同的语法。想象一下! - Daisy Leigh Breneckitest
代替[
,这样可以清晰地表明它是一个外部命令而不是语言的一部分。(test
和[
是完全相同的工具。) 当然,我认为test
也是Bash内置命令。 - Daisy Leigh Breneckitest
和[
都是内置命令。但是,它们的语法与外部[
命令相同,因此接受的答案仍然是正确的。 - Daisy Leigh Brenecki