Bash 条件表达式 (-v) 检查变量是否已设置

Hit*_*iri 4 linux bash conditional-operator

当尝试检查 bash 中是否设置或取消设置变量时,我发现了 bash 条件表达式:(-v此处如果设置了 shell 变量(已分配值),则为 True。)。我尝试代码:

#!/bin/bash
VAR="not-empty"
if [ ! -v "$VAR" ]; then
        echo "unset"
else 
        echo "set: $VAR"
fi
Run Code Online (Sandbox Code Playgroud)

但是,输出甚至是在代码开头unset分配的。VAR

我发现如何检查 Bash 中是否设置了变量?问题,并尝试替换! -v-z检查字符串变量VAR。输出是set: non-empty.

任何人都可以帮助解释第一种情况(使用-v表达式)为什么输出是unset

我的 bash 版本:

GNU bash,版本 5.0.17(1)-release (x86_64-pc-linux-gnu) 版权所有 (C) 2019 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses /gpl.html

Ram*_*pal 6

检查是否已设置时不需要 $ ,因此:

if [[ ! -v VAR ]]; then
    echo "unset"
else 
    echo "set: $VAR"
fi
Run Code Online (Sandbox Code Playgroud)

  • 并不是说不能使用“$”,而是“-v”的参数应该以变量的名称作为参数。如果你想检查是否设置了“VAR”,那么“VAR”,而不是“$VAR”的扩展,就是你想要的参数。 (5认同)