我一直在尝试在函数内评估表达式,如下所示:
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
和其他多种组合,其中大多数是猜测。
答案 0 :(得分:0)
答案 1 :(得分:0)
只需在新函数内部使用source
/ .
。
fn () {
. fn.sh "$1"
}
如果经常使用该功能,而您认为重复的磁盘I / O会成为问题,那么当您调用fn
时,该文件几乎肯定会在磁盘缓存中。