在zsh中,如何测试关联数组(也称为哈希表)是否具有某个属性?

时间:2016-10-21 01:51:18

标签: zsh

我想编写一个函数,如果属性存在则返回0,如果不存在,则返回1.

例如:

typeset -A hashtable
hashtable[a]='this is a valid element'
testprop hashtable[a] # returns 0
testprop hashtable[b] # returns 1

可能吗?

1 个答案:

答案 0 :(得分:4)

参数扩展 ${+name}几乎可以做到,你想要什么。如果name是设置参数1被替换,则0被替换。

要获得所需的界面,可以将其包装到函数中:

function testprop {
    case ${(P)+${1}} in
        0) return 1;;
        1) return 0;;
    esac
}
alias testprop='noglob testprop'

说明:

  • 参数扩展标记 P告诉 zsh 将值${1}解释为更多参数名称。
  • 如果${+name}设置为1,则{li> name将被替换为0
  • 别名是必需的,因此不需要引用testprob的参数。否则,索引周围的方括号将被解释为globbing运算符。