有以下文本文件,其中包含 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/