Use a substituição de comandos:
$ myvar=$(pwd)
$ echo $myvar
/etc
$ echo $(pwd)
/etc
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!
Use a substituição de comandos:
$ myvar=$(pwd)
$ echo $myvar
/etc
$ echo $(pwd)
/etc
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.
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