加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Bash测试中,是否声明了关联数组

发布时间:2020-12-16 01:10:37 所属栏目:安全 来源:网络整理
导读:如何测试是否在 Bash中声明了关联数组?我可以测试一个变量,如: [ -z $FOO ] echo nope 但我似乎不适用于关联数组: $unset FOO$declare -A FOO$[ -z $FOO ] echo nopenope$FOO=([1]=foo)$[ -z $FOO ] echo nopenope$echo ${FOO[@]}foo 编辑: 谢谢你的答案
如何测试是否在 Bash中声明了关联数组?我可以测试一个变量,如:
[ -z $FOO ] && echo nope

但我似乎不适用于关联数组:

$unset FOO
$declare -A FOO
$[ -z $FOO ] && echo nope
nope
$FOO=([1]=foo)
$[ -z $FOO ] && echo nope
nope
$echo ${FOO[@]}
foo

编辑:

谢谢你的答案,两者似乎都有效,所以我让速度决定:

$cat test1.sh
#!/bin/bash
for i in {1..100000}; do
    size=${#array[@]}
    [ "$size" -lt 1 ] && :
done
$time bash test1.sh #best of five

real    0m1.377s
user    0m1.357s
sys     0m0.020s

和另外一个:

$cat test2.sh
#!/bin/bash

for i in {1..100000}; do
    declare -p FOO >/dev/null 2>&1 && :
done
$time bash test2.sh #again,the best of five

real    0m2.214s
user    0m1.587s
sys     0m0.617s

编辑2:

让我们快速比较Chepner的解决方案与之前的解决方案:

#!/bin/bash

for i in {1..100000}; do
    [[ -v FOO[@] ]] && :
done
$time bash test3.sh #again,the best of five

real    0m0.409s
user    0m0.383s
sys     0m0.023s

那很快.

伙计们,再次感谢

在bash 4.2或更高版本中,您可以使用-v选项:
[[ -v FOO[@] ]] && echo "FOO set"

请注意,在任何版本中,使用

declare -A FOO

实际上并不会立即创建关联数组;它只是在名称FOO上设置一个属性,允许您将名称指定为关联数组.在第一次分配之前,数组本身不存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读