Como declarar funções como variáveis

2

Eu quero declarar a variável com a função pwd (), que me dará o caminho atual. Eu quero usar a função pwd () como variável $ {pwd}, algo assim. Como devo escrever? Obrigado!

    
por Ziyaddin Sadigov 08.06.2013 / 13:20

3 respostas

7

Use a substituição de comandos:

$ myvar=$(pwd)
$ echo $myvar
/etc
$ echo $(pwd)
/etc
    
por Nykakin 08.06.2013 / 13:30
2

O fornecimento de funções como parâmetros não é intencional e em breve ficará complicado ou feio. A única maneira que conheço é através da função eval. A abordagem de Nykakins não está passando uma função, mas um valor, como você pode ver neste exemplo comparativo:

#!/bin/bash
#
# Test providing a function as parameter
#
function f {
  param=
  echo "-----------------------"
  date +%T_%N
  sleep 0.3
  echo $param
  date +%T_%N
}

function e {
  param=""
  echo "-----------------------"
  date +%T_%N
  sleep 0.3
  eval $param
  date +%T_%N
}

f $(date +%T_%N) 
e "date +%T_%N"

O primeiro estilo avalia a função 'date' antes de passar o resultado para a função f do cliente, como você pode ver, porque a segunda vez é anterior à terceira:

-----------------------
14:00:12_983387321
14:00:12_980980238
14:00:13_287779378
-----------------------
14:00:13_290126185
14:00:13_594301594
14:00:13_596408013

O segundo bloco mostra que a função passada é avaliada entre as duas chamadas de data na função e.

Talvez você não tenha tido essa convenção de nomenclatura estrita em mente, ao solicitar uma função como variável, mas eu diria que isso faz a diferença entre uma função como variável e o resultado de uma função como variável.

    
por user unknown 08.06.2013 / 14:09
0

O Bash não o implementa, mas, de outra forma, o que você está precisamente pedindo, ou seja, usar variáveis exatamente como funções, é muito simples de implementar com funções de disciplina do ksh93, por exemplo:

#!/bin/ksh93

function pwd.get
{
    .sh.value=$(pwd)
}

cd /var/tmp
echo $pwd
cd /tmp
echo $pwd

Quando executado, o script anterior mostra:

/var/tmp
/tmp 
    
por jlliagre 14.07.2013 / 22:37