我想用 pwd() 函数声明变量,它将给我当前路径。我想将 pwd() 函数用作 ${pwd} 变量,诸如此类。我该怎么写?谢谢!
答案1
使用命令替换:
$ myvar=$(pwd)
$ echo $myvar
/etc
$ echo $(pwd)
/etc
答案2
将函数作为参数提供并不是有意为之,而且很快就会变得棘手或难看。我知道的唯一方法是通过 eval 函数。Nykakins 的方法不是传递函数,而是传递值,正如您在以下比较示例中看到的那样:
#!/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"
第一种样式在将结果传递给客户端函数 f 之前先评估函数“date”,如您所见,因为第二次在第三次之前:
-----------------------
14:00:12_983387321
14:00:12_980980238
14:00:13_287779378
-----------------------
14:00:13_290126185
14:00:13_594301594
14:00:13_596408013
第二个块显示,传递的函数在 e 函数中的两个日期调用之间进行评估。
当要求将函数作为变量时,也许您并没有考虑到严格的命名约定,但我想说,这会导致函数作为变量与函数作为变量的结果之间的差异。
答案3
Bash 没有实现它,但除此之外,您所要求的,即将变量完全用作函数,使用 ksh93 纪律函数很容易实现,例如:
#!/bin/ksh93
function pwd.get
{
.sh.value=$(pwd)
}
cd /var/tmp
echo $pwd
cd /tmp
echo $pwd
执行时,上述脚本显示:
/var/tmp
/tmp