tcl:eval 和 exec 混淆点

标签 tcl exec eval

我对 Tcl 中的 execeval 有点困惑。在下面的例子中:

set cmd "mkdir new_folder";
exec $cmd

无法使用错误消息:无法执行“mkdir new_folder”没有这样的文件或目录。 使用 eval 可以正常工作

set cmd "mkdir new_folder";
eval exec $cmd

我也试过这种方式:

set cmd_1 "mkdir";
set cmd_2 "new_folder"
exec $cmd_1 $cmd_2

它也很好用。 那是什么原因呢?

最佳答案

您真正需要注意的地方是您的参数之一是否包含空格。在那种情况下,eval 将不知道要做什么:

% set cmd "mkdir 'dir with spaces'"
mkdir 'dir with spaces'
% eval exec $cmd
% exec ls -l
total 20
drwxr-xr-x 2 glennj glennj 4096 Feb 12 07:51 'dir
drwxr-xr-x 2 glennj glennj 4096 Feb 12 07:51 spaces'
drwxr-xr-x 2 glennj glennj 4096 Feb 12 07:51 with

您真正想要做的是使用列表。然后 Tcl 准确理解分离元素是什么

% set cmd [list mkdir "dir with spaces"]
mkdir {dir with spaces}
% exec {*}$cmd
% exec ls -l
total 24
drwxr-xr-x 2 glennj glennj 4096 Feb 12 07:51 'dir
drwxr-xr-x 2 glennj glennj 4096 Feb 12 07:53 dir with spaces
drwxr-xr-x 2 glennj glennj 4096 Feb 12 07:51 spaces'
drwxr-xr-x 2 glennj glennj 4096 Feb 12 07:51 with

关于tcl:eval 和 exec 混淆点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28468367/

相关文章:

java - 使用 php 在日志文件中显示消息

linux - TCL,预计为 : Multiple files w/SCP

c - Linux c 中的 execl 函数

linux - 为什么/bin/login 在最近的 Linux 上 fork

asp.net - 如果内联 eval 不是什么,则连接

javascript - if 语句中的 Eval()

选择解释器 TCL C API

python exec 在 2.7 和 3.3 之间表现不同

php - eval(),有什么意义呢?

bash - 调试 tcl 流程 - 就像 bash -