Ben*_*min 11 command-line bash
在处理一些 bash 函数时,我不知道source ...
命令,所以我eval $(cat ...)
改用了。现在我想知道,我应该改变它的每次使用,还是只是相同的功能?
他们现在似乎工作相同,但也许以后会有一些误导性的差异,我只是想知道。
gei*_*rha 11
正如@glennjackman 已经提到的,您需要引用命令替换,否则分词和路径名扩展将在内容被评估之前修改内容。虽然两者都将执行文件中的命令,但还是有区别的。
当您获取脚本时,将修改各种特殊的 shell 变量,主要是BASH_SOURCE
、BASH_LINENO
和FUNCNAME
数组。这些对于打印错误消息和调试很有用。
您可以使用return
命令 ( help return
)从源脚本返回。使用 eval,你不会得到那种效果。同样,不会为 eval 触发 RETURN 陷阱。
在获取脚本时,您可以将参数传递给它。你不能用那个 eval 做到这一点。
使用 eval,命令替换将在将文件传递给 eval 之前将文件的全部内容读入内存。当您获取它时,bash 将在运行时从文件中读取。
eval $(cat ...)
并非在所有情况下都有效。例如,$(cat ...)
在内容被处理之前,换行符被转换为单个空格eval
。这通常会破坏多行语句,例如循环和此处的文档。
例如,尝试使用两种方法创建以下文件:
for i in 1 2 3; do
echo $i
done
cat<<EOF
a
b
c
EOF
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11391 次 |
最近记录: |