linux - 我如何使用 bash 准确确定文件中是否 undefined variable

标签 linux bash variables

有以下文本文件,其中包含 ip_address 变量。归档如下

$ cat file
ip_address=10.78.1.0
filename=test.bin

现在有 bash 脚本来检查 ip_address 是否已定义(或是否可用)

#!/bin/bash

for list in $(cat file)
do
    eval $list
done

${ip_Address:?Error \$IP_Address is not defined}

[ -z ${ip_Address:-""} ] && printf "No IPaddress\n" || echo "$ip_Address"

现在,如果我的文件不包含 ip_address 变量的行,那么脚本会在此处中断,但如果存在,则再次检查 ip_address 是否包含任何值。

但是我不想破坏我的脚本,而是如果变量不可用我想做点什么

喜欢

#!/bin/bash

for list in $(cat file)
do
    eval $list
done

if [ variable not available ]
then
    #do something
else
    #check variable set or not
    [ -z ${ip_Address:-""} ] && printf "No IP address\n" || echo "$ip_Address"
fi

试过像这样使用 -z 标志(实际上这个标志检查变量是否为空但不检查变量的可用性)

if [ -z  $ip_Address ]
then
    #do something
else 
    #rest of code
fi

但它在以下情况下失败

案例一: 如果我的文件如下

$ cat file
  filename=test.bin

那么它必须进入 if.. block 并且确实如此。所以这不是问题

案例 2:

如果我的文件如下

$ cat file
  ip_address=
  filename=test.bin

那么它必须进入 else.. block ,但它没有。所以这是个问题

那么我如何区分变量是在 bash 中定义的还是可用的?

最佳答案

如果您使用的是 bash 4.2(最新的,虽然 4.3 应该很快发布...),您可以使用 -v 条件运算符来测试是否变量已设置。

if [[ -v ip_Address ]]; then
    printf "ip_Address is set\n";
fi

请注意,-v 的参数是您要测试的变量的名称,因此您不要在它前面加上$.

关于linux - 我如何使用 bash 准确确定文件中是否 undefined variable ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633276/

相关文章:

linux - 如何排除 tar 的绝对路径?

php - 在 MySQL/PHP 中为变量留出空格

javascript - Laravel - 将 php 变量作为数组传递给 JS

c++ - 有没有一种安全的方法可以在 C++ 中执行来自用户/客户端的代码?

linux - Openshift 应用程序 : "OutOfMemory: Java heap space"

php - PHP 能否检测到 Apache 是否已重新启动?

linux - 在linux中执行一个目录

ruby - SoundCLI gem 失败

xml - 在没有 XML 解析器的情况下为最近修改的文件过滤 svn ls --xml

从不同 View 访问iphone全局变量