在函数内部EVAL猫(eval cat inside a function)

2019-10-30 12:02发布

我一直在试图evaulate函数内的表达式如下:

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

和无数其他的组合,其在这一点上大部分是猜测。

Answer 1:

找到了答案:

eval "fn() { eval \"\$(cat "fn.sh")\"; }"

强制性参考 ,解释到最好的程度我明白了使用的安全隐患eval



Answer 2:

只需使用source / . 从新函数内部。

fn () {
  . fn.sh "$1"
}

如果使用往往不够,你觉得重复磁盘I功能/ O将是一个问题,文件将几乎肯定会在磁盘缓存中,当你调用fn



文章来源: eval cat inside a function