eval cat in a function

问题描述 投票:0回答:2

我一直在尝试评估函数内的表达式,如下所示:

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

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

bash shell eval cat
2个回答
0
投票

找到答案:

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

强制reference解释到最好程度我理解使用eval的安全风险。


0
投票

只需在新功能中使用source / .即可。

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

如果在您认为重复磁盘I / O出现问题时经常使用该函数,则在调用fn时,该文件几乎肯定会位于磁盘缓存中。

© www.soinside.com 2019 - 2024. All rights reserved.