在函数内评估猫
eval cat inside a function
我一直在尝试对函数内部的表达式求值,如下所示:
eval "fn() { $(cat fn.sh); }"
其中 fn.sh 包含以下内容:
#!/bin/sh
echo "You provided ."
所以当我打电话时:
fn "a phrase"`
它打印 "You provided a phrase."。但是我无法让它工作。
特别令人沮丧的是:
eval "$(cat fn.sh)"
完美运行!我在这里错过了什么?
我试过的:
eval "fn() { \"$(cat fn.sh)\"; }"
fn
# bash: #!/bin/sh
# echo "You provided ."
# return 1: No such file or directory
eval "fn() { $(cat fn.sh); }"
fn
# bash: #!/bin/sh: No such file or directory
以及无数其他组合,此时大部分都是猜测。
找到答案:
eval "fn() { eval \"$(cat "fn.sh")\"; }"
强制性 reference 最好地解释了我理解使用 eval
的安全风险。
只需在新函数中使用 source
/.
。
fn () {
. fn.sh ""
}
如果在您认为重复磁盘 I/O 会成为问题的地方经常使用该函数,则当您调用 fn
.[=14= 时,文件几乎肯定会在磁盘缓存中]
我一直在尝试对函数内部的表达式求值,如下所示:
eval "fn() { $(cat fn.sh); }"
其中 fn.sh 包含以下内容:
#!/bin/sh
echo "You provided ."
所以当我打电话时:
fn "a phrase"`
它打印 "You provided a phrase."。但是我无法让它工作。
特别令人沮丧的是:
eval "$(cat fn.sh)"
完美运行!我在这里错过了什么?
我试过的:
eval "fn() { \"$(cat fn.sh)\"; }"
fn
# bash: #!/bin/sh
# echo "You provided ."
# return 1: No such file or directory
eval "fn() { $(cat fn.sh); }"
fn
# bash: #!/bin/sh: No such file or directory
以及无数其他组合,此时大部分都是猜测。
找到答案:
eval "fn() { eval \"$(cat "fn.sh")\"; }"
强制性 reference 最好地解释了我理解使用 eval
的安全风险。
只需在新函数中使用 source
/.
。
fn () {
. fn.sh ""
}
如果在您认为重复磁盘 I/O 会成为问题的地方经常使用该函数,则当您调用 fn
.[=14= 时,文件几乎肯定会在磁盘缓存中]