Итак, я знаю, что вы можете проверить наличие обычного параметра через косвенное расширение, выполнив что-то вроде:
foo=1
bar=foo
(( ${(P)+bar} )) && print "$bar exists"
И я знаю, что вы можете проверить наличие ключа внутри ассоциативного массива делая что-то вроде:
foo=([abc]=1)
(( ${+foo[abc]} )) && print "abc exists"
Однако я не могу понять, как объединить два и проверить наличие ключа внутри ассоциативного массива посредством косвенного расширения. Возможно ли это без использования eval?
Я пробовал несколько комбинаций, включая следующие, и ни одна из них не работала:
foo=([abc]=1)
bar=foo
(( ${(P)+bar[abc]} )) && print "$bar has key abc" # Test fails
(( ${(P)+${bar}[abc]} )) && print "$bar has key abc" # Passes for nonexistant keys
(( ${${(P)+bar}[abc]} )) && print "$bar has key abc" # Test fails
(( ${${(P)bar}+[abc]} )) && print "$bar has key abc" # prints "zsh: bad output format specification"