Você pode alterar seu código um pouco:
is_xyz_node() {
host="$1"
for xyznode in $XZY_NODES; do
if [ -n "$xyznode" ] &&
[ "$host" = "$xyznode" ]; then
return 0
fi
done
return 1
}
if is_xyz_node "$1"; then
printf '%s is a xyz node\n' "$1"
else
printf '%s is NOT a xyz node\n' "$1"
fi
Há algumas coisas a serem observadas:
-
return
no bash requer um tipo inteiro em seu argumento opcional; isso faz com que a função saia com esse inteiro como seu status ou com o valor de$?
, se não for fornecido. Então você deve usar um inteiro em vez de uma string. O inteiro deve estar entre 0 e inclusive;return 0
significa sucesso, qualquer outro valor significa falha. -
Você deve proteger suas variáveis envolvendo-as entre aspas duplas.
-
Você deve adicionar um teste em que
$xyznode
não seja nulo. Como o @mikeserv apontou em seu comentário, é possível que ambos$1
e$xyznode
sejam nulos, então[ '' = '' ]
retorna verdadeiro.