Shell中如何检查字典是否已声明?有无更地道的实现方式?
在Shell中检查关联数组(字典)是否已声明的地道方法
如果只是要检查字典变量是否已存在,可以直接利用declare -p命令的返回状态来判断,这比捕获输出再判断空值更简洁高效:
# 示例:检查名为dictionary的字典是否已声明 if declare -p dictionary >/dev/null 2>&1; then echo "yes" else echo "no" fi
原理是:若变量已被声明(不管是普通变量还是关联数组),declare -p会正常执行并返回状态码0;若变量未声明,命令执行失败返回非0状态码,我们通过if直接判断命令结果即可。
如果需要严格确认该变量是关联数组(字典)类型,可以进一步匹配declare -p的输出内容:
if [[ "$(declare -p dictionary 2>/dev/null)" =~ "declare -A" ]]; then echo "是已声明的关联数组" else echo "未声明或不是关联数组" fi
这种方式可以区分普通变量和关联数组,避免把普通字符串变量误判为字典。
另外补充:[[ -v dictionary ]]可以检查变量是否存在,但无法区分变量类型,仅适合不需要验证是否为字典的场景。
内容的提问来源于stack exchange,提问作者Kos
相关产品推荐
相关产品推荐

