shell - fish shell 。如何检查变量是否设置/为空?

标签 shell fish

我该怎么做

set variable (some_command_that_may_return_a_string)
if [ variable is set ]
    do_something

相反,我如何检查变量是否为空?

最佳答案

  • set -q var (注意缺少的“$” - 它使用变量名)可用于检查是否已设置变量。
  • set -q var[1]可用于检查变量的第一个元素是否已分配(即它是否作为列表非空)。
  • test -n "$var" [fn0] (或 [ -n "$var" ] )可用于检查变量是否扩展为非空字符串(而 test -z 是相反的 - 如果为空则为真)。

  • 在稍微不同的情况下,这些将是真/假。

    当没有set var已完全执行(且未从父进程继承),set -q var , set -q var[1]test -n "$var"会是假的,test -z "$var"会是真的。

    当类似 set var已经完成(没有任何额外的参数),set -q var会是真的,set -q var[1]会是假的。

    当类似 set var ""已经搞定,都set版本将是真实的。

    当类似 set var "somestring" (甚至 set var "" "" [fn1])已经完成,set s 为真,test -z "$var"会是假的。

    [fn0]:你永远不想使用 test (或 [ )而不引用变量。一个特别令人震惊的例子是 test -n $var如果变量包含某些内容并且列表为空/未设置(根本没有 set 或没有参数的 set var),都将返回 true。这是因为 fish 的test是少数遵循 POSIX 的部分之一,这要求 test任何一个论点都是真的。它也不能正确处理列表 - test -n $var如果 var 有多个元素,将会产生奇怪的结果。

    [fn1]:这是因为一个列表会通过用空格连接元素来扩展为字符串,因此由两个空字符串组成的列表将扩展为“” - 一个空格。因为那不是空的,test -z返回假。

    关于shell - fish shell 。如何检查变量是否设置/为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47743015/

    相关文章:

    bash - 如何在 bash 中测试文件名扩展结果?

    Ruby:使用 'echo' 选项执行 shell 命令 '-n'

    ruby - Ruby Shell 中的转义字符

    macos - 在Mac上的iterm2上,需要做些什么调整才能使ssh://user@machine.com URL与fish一起使用?

    linux - Unix - Expect 在执行命令时不工作

    bash - 有没有一种方法可以使用 bash shell 逐行组合两个文件

    shell - 在 Cygwin 下编译 fish shell?

    linux - 在 fish shell 中将 awk 输出设置为变量

    command-line - 使用命令行在 Sublime Text 3 中打开文件夹

    shell - fish shell 中的通用变量存储在哪里?