gpt4 book ai didi

Bash 检查变量数组是否有值

转载 作者:行者123 更新时间:2023-12-04 16:18:22 26 4
gpt4 key购买 nike

我有一个变量数组。我想使用 for 循环检查变量是否具有值。

我正在将值放入循环中,但 if 条件失败

function check {
arr=("$@")
for var in "${arr[@]}"; do
if [ -z $var ] ; then
echo $var "is not available"
else
echo $var "is available"
fi
done
}

name="abc"
city="xyz"
arr=(name city state country)
check ${arr[@]}

对于上述,我得到的都是 可用

预期输出是
name is available
city is available
state is not available
country is not available

最佳答案

这是您任务的正确语法

if [ -z "${!var}" ] ; then
echo $var "is not available"
else
echo $var "is available"
fi

说明,这个方法使用了间接变量展开,这个构造 ${!var}将扩展为名称在 $var 中的变量的值.

已更改 check有点功能
check () {
for var in "$@"; do
[[ "${!var}" ]] && not= || not="not "
echo "$var is ${not}available"
done
}

另一个使用 declare 的变体
check () {
for var in "$@"; do
declare -p $var &> /dev/null && not= || not="not "
echo "$var is ${not}available"
done
}

来自 declare帮助
$ declare --help
declare: declare [-aAfFgilnrtux] [-p] [name[=value] ...]
Set variable values and attributes.
Declare variables and give them attributes. If no NAMEs are given,
display the attributes and values of all variables.
...
-p display the attributes and value of each NAME
...

实际上,可以使用它一次检查所有变量
check () {
declare -p $@ 2>&1 | sed 's/.* \(.*\)=.*/\1 is available/;s/.*declare: \(.*\):.*/\1 is not available/'
}

关于Bash 检查变量数组是否有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60448774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com