Existe um cifrão extra na declaração do caminho local. Tente isto:
containsfilepath () {
local e
for e in "${@:1}"; do [[ "$e" =~ .*".out" ]] && return 0 && local path="abc"; done
return 1
}
Nesse código, como a instrução return 0 é executada antes , a instrução de atribuição path é atingida, path nunca recebe um valor atribuído. Se você quiser que o caminho seja atribuído a um valor que possa ser acessado posteriormente, as instruções precisam ser revertidas e o qualificador local precisa ser removido. tente:
containsfilepath () {
local e
for e in "${@:1}"
do
[[ "$e" =~ .*".out" ]] && { path="abc"; return 0; }
done
return 1
}