retornando resultados de uma função enquanto a torna aplicável em um if

1

Eu quero definir um valor variável em uma função, mas também ser capaz de usá-lo em um if. a matriz args é argumentos aplicados ao executar o script bash args=("$@") .

containsfilepath () {
  local e
  for e in "${@:1}"; do [[ "$e" =~ .*".out" ]] && return 0 && local $path="abc"; done
  return 1
}

para que eu possa fazer isso

if containsfilepath "${args[@]}" ; then 

    echo "$path" "\n"
fi

Eu fiz o código, mas ele não está funcionando nenhuma idéia?

    
por Raymond Ghaffarian Shirazi 29.09.2015 / 23:37

1 resposta

1

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
}
    
por John1024 29.09.2015 / 23:44