我如何在 tclsh 中执行命令替换?
How do I perform a command substitution in tclsh?
我想在变量中捕获命令的标准输出,类似于 Bash 中的命令替换:
#!/bin/bash
x="$(date)"
echo $x
我尝试在 tclsh 中做同样的事情,但它没有达到我想要的效果:
#!/bin/tclsh
set x [date]
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
在交互式使用中,未知命令处理程序猜测这就是您想要的。在某些情况下。请在您的脚本中明确说明!
您可能应该将 运行ning 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
的输出完全匹配。间距不完全相同,但这对很多用途来说无关紧要。)
我想在变量中捕获命令的标准输出,类似于 Bash 中的命令替换:
#!/bin/bash
x="$(date)"
echo $x
我尝试在 tclsh 中做同样的事情,但它没有达到我想要的效果:
#!/bin/tclsh
set x [date]
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
在交互式使用中,未知命令处理程序猜测这就是您想要的。在某些情况下。请在您的脚本中明确说明!
您可能应该将 运行ning 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
的输出完全匹配。间距不完全相同,但这对很多用途来说无关紧要。)