我一直在尝试评估函数内的表达式,如下所示:
eval "fn() { $(cat fn.sh); }"
其中fn.sh包含以下内容:
#!/bin/sh
echo "You provided $1."
所以当我打电话时:
fn "a phrase"`
它打印“你提供了一个短语。”但是我无法让它发挥作用。
特别令人沮丧的是:
eval "$(cat fn.sh)"
完美运作!我在这里错过了什么?
我尝试过的:
eval "fn() { \"\$(cat fn.sh)\"; }"
fn
# bash: #!/bin/sh
# echo "You provided $1."
# return 1: No such file or directory
eval "fn() { \$(cat fn.sh); }"
fn
# bash: #!/bin/sh: No such file or directory
和无数其他组合,其中大部分在这一点上是猜测工作。
只需在新功能中使用source
/ .
即可。
fn () {
. fn.sh "$1"
}
如果在您认为重复磁盘I / O出现问题时经常使用该函数,则在调用fn
时,该文件几乎肯定会位于磁盘缓存中。