Je veux déclarer une variable avec la fonction pwd (), ce qui me donnera le chemin actuel. Je veux utiliser la fonction pwd () comme variable $ {pwd}, quelque chose comme ça. Comment je dois écrire? Merci!
Utilisez la substitution de commande:
$ myvar=$(pwd)
$ echo $myvar
/etc
$ echo $(pwd)
/etc
Fournir des fonctions en tant que paramètres n'est pas prévu et sera bientôt compliqué ou moche. Le seul moyen que je connaisse est via la fonction eval. L'approche de Nykakins ne passe pas une fonction, mais une valeur, comme vous pouvez le voir dans cet exemple comparatif:
#!/bin/bash
#
# Test providing a function as parameter
#
function f {
param=$1
echo "-----------------------"
date +%T_%N
sleep 0.3
echo $param
date +%T_%N
}
function e {
param="$1"
echo "-----------------------"
date +%T_%N
sleep 0.3
eval $param
date +%T_%N
}
f $(date +%T_%N)
e "date +%T_%N"
Le premier style évalue la fonction 'date' avant de transmettre le résultat à la fonction client f, comme vous pouvez le constater, car la deuxième fois se situe avant la troisième:
-----------------------
14:00:12_983387321
14:00:12_980980238
14:00:13_287779378
-----------------------
14:00:13_290126185
14:00:13_594301594
14:00:13_596408013
Le deuxième bloc indique que la fonction transmise est évaluée entre les deux appels de date de la fonction électronique.
Vous n’avez peut-être pas à l’esprit cette convention de dénomination stricte lorsque vous demandez une fonction en tant que variable, mais je dirais que cela fait la différence entre une fonction en tant que variable et le résultat d’une fonction en tant que variable.
Bash ne l’implémente pas, mais sinon, ce que vous demandez précisément, c’est-à-dire utiliser des variables exactement comme des fonctions, est très simple à implémenter avec les fonctions de discipline de ksh93, par exemple:
#!/bin/ksh93
function pwd.get
{
.sh.value=$(pwd)
}
cd /var/tmp
echo $pwd
cd /tmp
echo $pwd
Lorsqu'il est exécuté, le script précédent indique:
/var/tmp
/tmp