如何测试是否在
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上设置一个属性,允许您将名称指定为关联数组.在第一次分配之前,数组本身不存在.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。