📜  Bash 脚本 – 如何检查变量是否已设置

📅  最后修改于: 2022-05-13 01:57:33.003000             🧑  作者: Mango

Bash 脚本 – 如何检查变量是否已设置

在 BASH 中,我们可以检查是否设置了变量。我们可以在条件语句中使用几个参数来检查变量是否有值。在本文中,我们将了解如何使用 -z、-v 和 -n 等某些选项检查变量是否具有设置/空值。

使用“-v”选项

-v 选项允许我们检查变量是否被赋值。我们可以使用以下语法检查变量,

[ -v variable_name ]

我们可以在任何需要的地方将语法嵌入到条件语句中,如果提供给它的变量是否已提前声明,则 -v 选项基本上返回 true,而不管其值如何。我们可以在下面的示例脚本中探索变量为非空未声明的情况。

#!/bin/usr/env bash

k="Geek"

if [ -v k ];then
    echo "Variable is set"
else
    echo "Variable is not set"
if

正如我们在上面的输出中看到的那样,如果定义了变量,则条件返回 true 。即使变量可能是空字符串,它也会返回 true。

现在,在这个例子中,变量k没有被声明。因此选项-v返回 false 并且我们相应地评估条件。

在最后一个示例中,我们将变量k声明为空字符串。而这一次,如前所述,如果变量之前声明过, -v选项将返回 true,即使它为空,它也会检查变量是否之前声明过。因此,我们可以得出结论,如果提供给它的变量被声明而与它包含的值无关,则 -v 选项返回 true。

使用“-z”选项

-z 选项允许我们检查变量是否具有非零长度。如果变量中值的长度为零(空),则返回 true。与 -v 选项不同,如果字符串为空,它将返回 true。此命令的语法与其他选项有点不同且尴尬,

[ -z "${variable_name}" ]

或者

[[ -z ${variable_name} ]] 

在某些情况下,这两种语法的工作方式略有不同,例如在条件语句中解析时不必双引号。如果 BASH 中的可移植性是您的首要任务,那么选择取决于用户,那么“ [[ ”语法效果很好。让我们看一下示例 BASH 脚本中变量为非空、未声明和空的情况的示例。

#!/bin/usr/env bash

k="Geeks"

if [[ ! -z ${k} ]];then
   echo "Variable is not empty"
else
   echo "Variable is empty"
if

我们使用了“ ” 前面的 -z 以补充条件,这样做是为了在理解不同的选项和参数时提供同质性。

注意:如果变量的值的长度为零,-z 选项返回 true,如果变量被提前声明,-v 选项返回 true(即对于空和未声明的变量返回 false)

正如我们所看到的, -z选项返回 false,即变量值不为空,因此我们打印相同的值。由于我们使用了“ ”运算符(不是运算符)我们得到与计算表达式相反的结果。

如前所述, -z选项返回 true ,即变量的值为 empty 。与条件语句一样,not运算符反转结果,我们回显变量为空。

在上面的示例中,由于变量“k”没有在任何地方定义或声明, -z选项将返回 true,因为变量本身不存在。因此,如果变量的值的长度为零或未定义,我们已经看到 -z 选项返回 true

使用“-n”选项

-n 选项是 -v 和 -z 选项的组合,如果提供的变量的值为非空,则 -n 选项返回 true。

  • 与 -z 选项不同,如果变量的值为非空则返回 false。
  • 与 -z 选项一样,如果值已声明但为空,则 -n 选项返回 false。
  • 与 -v 选项不同,如果变量已声明但具有空值,则 -n 选项返回 false。
  • 与 -v 选项一样,如果变量的值非空,则 -n 选项返回 true。

让我们看看 -n 选项的语法。

[ -n "${variable_name}" ]

或者

[[ -n $variable_name ]] 

语法并不像说的那么严格,但建议用于某些情况下的任何严重错误。

现在,我们将看到在示例 BASH 脚本中传递给 -n 选项的变量的非空、未声明和空值等情况。

#!/bin/usr/env bash

k="Geeks"

if [[ -n $k ]];then
    echo "Variable is set"
else
    echo "Variable is not set"
if

如果变量的值非零,-n 选项将返回 true。如果值为空或变量未声明,则返回 false。

正如我们所看到的,条件返回 true,因为变量的 value(k) 是非空的。

在此示例中,由于变量 (k) 未声明,因此条件被评估为 false ,并且我们回显未设置变量。

在上面的示例中,变量(k)为空,因此使用 -n 选项的条件被评估为 false ,我们根据要求回显上下文。

从上面的示例中,我们能够理解不同的选项,例如-z、-v -n检查变量是否在 BASH 脚本中设置/为空。为了清楚地了解可用的三个选项,可以总结下表。

Option\Valuenon-emptyemptynot declared/not set
-vtruetruefalse
-zfalsetruetrue
-ntruefalsefalse

-z 和 -n 选项的修饰符

我们可以使用某些修饰符,例如 +set 和 -unset 来更改选项评估条件的方式。我们将在下面的简短示例中查看它们。

+设置修饰符

我们可以将修饰符+set 设置-z 选项,以仅在未声明变量时返回 true 并为 set 和空值返回 false

[[ -z ${variable_name+set} ]]

我们将在示例中应用修饰符并评估由于附加到 -z 选项的修饰符而生成的不同结果条件。

#!/bin/usr/env bash

k=""

if [[ ! -z ${k+set} ]];then
    echo "Variable is not empty"
else
    echo "Variable is empty"
if

我们可以看到-z选项和+set修饰符返回 false。如前所述,我们使用“ ”运算符来修改条件并相应地评估结果。因此, +set修饰符只允许变量的设置值和空值为真非设置值为假就像 -v 选项一样,但方式相反

现在, +set 修饰符也可以应用于-n 选项。此修饰符将允许空集变量返回 true 而不是 false

[[ -n ${variable_name+set} ]] 

我们将在示例中应用修饰符并评估由于附加到 -n 选项的修饰符而生成的不同结果条件。

#!/bin/usr/env bash

k=""

if [[ -n ${k+set} ]];then
    echo "Variable is set"
else
    echo "Variable is not set"
if

+set 修饰符与 -n 选项一起使用,这允许空集变量将结果评估为真。这会将 -n 选项修改为 -v 选项,该选项也接受空字符串为真。

另一个修饰符是-unset ,它允许变量的未设置值返回 true。带有 -z 选项的 -unset 修饰符的语法如下所示:

[[ -z ${variable_name-unset} ]]

我们将使用相同的示例来演示 -z 选项的 -unset 修饰符的用法。

#!/bin/usr/env bash

if [[ ! -z ${k-unset} ]];then
    echo "Variable is not empty"
else
    echo "Variable is empty"
if

-unset 修饰符允许-z 选项未声明的变量接受为 false 。这可能不是很有帮助,但如果在某些情况下需要,仍然可以使用。

我们甚至可以在 -n 选项中使用 -unset 修饰符。 -unset 修饰符将允许-n 选项接受未设置或未声明的变量评估为 true 。带有 -unset 修饰符的 -n 选项的语法类似。

[[ -n ${variable_name-unset} ]]

我们将使用 -n 选项评估修饰符,示例如下:

#!/bin/usr/env bash

if [[ -n ${k-unset} ]];then
    echo "Variable is set"
else
    echo "Variable is not set"
if

正如我们所见,-n 选项和 -unset 修饰符允许未设置或未声明的变量将条件返回为真。因此,这可以再次成为验证具有某些未声明的变量条件和约束的条件的选项。

下面是修改后的图表,总结了以下选项和修饰符。

Options\Valuenon-emptyemptynot set \ not declared
-vtruetruefalse
-zfalsetruetrue
-ntruefalsefalse
-z +setfalsefalsetrue
-n +settruetruefalse
-z -unsetfalsetruefalse
-n -unsettruefalsetrue