【发布时间】:2021-09-27 18:51:22
【问题描述】:
不确定我是否在这里愚蠢,但我无法弄清楚这一点。
如果我把它放在 bash 脚本中:
var="`date '+%a %b %d'`*.*INFO Ended execution of script"
echo $var
我得到的输出是:
Mon Sep 27*.*INFO Ended execution of script
但是,如果我将相同的内容放在一个文件中:
"`date '+%a %b %d'`*.*INFO Ended execution of script"
然后写一个小bash脚本来读取这个文件的内容
while read -e line
do
echo "$line"
done < file
当我执行这个脚本时,我得到了
"`date '+%a %b %d'`*.*INFO Ended execution of script"
当我从文件中读取内容时,如何让命令替换起作用?
【问题讨论】:
-
少用
eval(不推荐),你不用。read读取的文本不会输入到 shell,因此不受命令替换等 shell 处理的影响。 -
见BashFAQ #50(以及,为什么-
eval-is-a-bad-idea,BashFAQ #48)。 -
...这不起作用有很好的理由:如果不是这样,基本上不可能编写安全处理不可信数据的 shell 语言的代码。当您告诉它打印该数据时,您不希望其中嵌入了 Python 代码的数据运行该代码。为什么外壳应该不同?
-
另外,命令替换慢。如果您需要一种高性能的方法来处理大量数据,那么它们就是不适合这项工作的工具(而 bash 4.3 及更高版本具有更新/更好/更快的内置工具来快速格式化日期)。