Awk e Bash têm matrizes associativas, que fornecem uma maneira de descobrir se uma determinada chave / índice está na matriz.
no awk:
awk 'BEGIN{ a["foo"]=1; if ("foo" in a) print "yea"; }'
no Bash:
bash -c 'declare -A a=([foo]=1); if [[ ${a[foo]+x} = x ]]; then echo "yea"; fi'
( ${a[foo]+x}
avalia para x
se a[foo]
estiver definido, para a sequência vazia caso contrário)
Mas não é possível encontrar facilmente um valor específico nos valores dos elementos da matriz. Aqui, a[1]
é foo
, mas o teste não o encontra (ele encontraria os índices 1
, 2
e 3
):
awk 'BEGIN{ split("foo bar doo", a); if ("foo" in a) print "foo exists?"; }'
você terá que percorrer o array manualmente:
awk 'BEGIN{ split("foo bar doo", a); for (i in a) if (a[i] == "foo") print "foo exists"; }'
ou no Bash:
bash -c 'a=(foo bar doo); for v in "${a[@]}"; do
if [[ $v = "foo" ]]; then echo "foo exists"; fi; done;'