NOTA: vou mostrar como corrigir isso para que funcione no Bash 4.
Acho que você está passando a matriz para a função incorretamente:
$ cat contains.bash
#!/usr/bin/env bash
branch_type="${1:-feature}";
arr=('feature' 'bugfix' 'release');
contains() {
local array=$1
local seeking="$2"
for v in ${!array}; do
if [ "$v" == "$seeking" ]; then
return 0;
fi
done
return 1;
}
if ! contains arr $branch_type; then
echo "Branch type needs to be either 'feature', 'bugfix' or 'release'."
echo "The branch type you passed was: $branch_type"
exit 1;
fi
echo "the array contains: $branch_type";
Eu mudei as coisas um pouco e agora parece estar funcionando:
$ ./contains.bash
the array contains: feature
Alterações
Eu só fiz 2 modificações no seu script original. Eu mudei como a função contains()
estava sendo chamada para que ela passasse o nome da array arr
para esta linha:
if ! contains arr $branch_type; then
e alterou essa linha dentro da função contains()
, onde a matriz é definida usando os argumentos passados, retirando as aspas da configuração da variável local array
:
local array=$1