检查 Fish 中的变量是否为空

检查 Fish 中的变量是否为空

我想检查fish(友好的交互式shell)中变量是否为空的条件。

if test "$argv" = null
    # do something...
else 
    # do something else...

答案1

我具体不知道“鱼”,但我知道标准的“测试”。

尝试:

test "$argv" = ""

或者

test "x$argv" = x

或者

test -z "$argv"

这假设您想要测试它是否未设置或为空。如果您只需要这两种情况之一,则需要 shell 特定的变量扩展修饰符。

请注意,第二个示例经常出现在尝试高可移植性的代码中。它避免了空参数,因为它们有时似乎会丢失。

第三个示例是test测试空字符串的选项。

答案2

我对鱼也不太了解,但和其他 shell 一样,它似乎也有未定义变量和空变量的区别。

从常见问题解答来看,您似乎可以测试变量是否已定义with set -q var, 和 usestring length -q来查看它是否包含非空字符串。

例如,要查看脚本的第一个参数是否已定义、为空还是非空:

#!/usr/bin/fish
if not set -q argv[1]
    echo 'not defined'
else if not string length -q -- "$argv[1]"
    echo 'defined but empty'
else
    echo 'defined and non-empty'
end 

如果您不关心未定义和已定义但为空的变量之间的区别,只需跳过第一个测试,未定义的值在双引号中时将扩展为空字符串。

相关内容