如何将函数声明为变量

如何将函数声明为变量

我想用 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 

相关内容