如何在tclsh中执行命令替换?

如何在tclsh中执行命令替换?,tcl,tclsh,Tcl,Tclsh,我想在变量中捕获命令的stdout,类似于Bash中的命令替换: #/bin/bash x=“$(日期)” echo$x 我尝试在Tcsh中执行相同的操作,但它不能满足我的要求: #/bin/tclsh 设定x[日期] echo$x 如果使用tclsh myscript.tclsh执行脚本,则会出现错误: invalid command name "date" while executing "date " invoked from w

我想在变量中捕获命令的stdout,类似于Bash中的命令替换:

#/bin/bash
x=“$(日期)”
echo$x
我尝试在Tcsh中执行相同的操作,但它不能满足我的要求:

#/bin/tclsh
设定x[日期]
echo$x
如果使用
tclsh myscript.tclsh
执行脚本,则会出现错误:

invalid command name "date"
    while executing
"date "
    invoked from within
"set x [ date ]"
另一方面,如果我用
tclsh
打开一个TCL交互式shell,它不会给出错误,
echo
行打印一个空字符串


为什么我的程序在执行带有或不带REPL的脚本时会给出不同的结果?如果没有一种方法可以捕获shell命令的输出并将其存储在变量中,类似于Bash中的命令替换?

如果不以交互方式使用Tcl,则需要显式使用
exec
命令来运行子进程

set x [exec date]
# Tcl uses puts instead of echo
puts $x
在交互使用中,未知的命令处理程序会猜测这就是您想要的。在某些情况下。请在脚本中明确说明


您可能应该将运行
date
子流程替换为对内置
clock
命令的适当调用:

# Get the timestamp in seconds-from-the-epoch
set now [clock seconds]
# Convert it to human-readable form
set x [clock format $now -format "%a %d %b %Y %H:%M:%S %Z"]

(这几乎完全符合该系统上日期的输出。间距不太一样,但这对许多用途来说并不重要。)

交互式用途是由神奇的全球政府管理的。我不打算在这里写它,因为你根本不应该在脚本中使用它。神奇的快捷方式对于交互式使用来说都是非常好的,但是在制作一个可靠的程序时,它们的伤害往往远远大于它们的帮助……谢谢!我只是用
date
来保持问题的简洁,但是
clock
的建议也很有用。