从命令行获取TCL的版本?

Sim*_*ell 51 tcl

我正在寻找一种非常直接的方法来从命令行获取安装在机器上的TCL版本.对于大多数编程语言来说,都是如此

languagename -v
Run Code Online (Sandbox Code Playgroud)

提供我想要的信息.这似乎不是一个选择tclsh.

TCL FAQ Q.B21建议

echo 'puts $tcl_version;exit 0' | tclsh
Run Code Online (Sandbox Code Playgroud)

但我想知道是否还有更直接和跨平台的东西?(我怀疑这会在微软操作系统上失败.)

-

编辑:只是为了强调我正在寻找可以直接从操作系统命令行执行的东西.一旦你开始有各种各样的信息tclsh,但我正试图避免这种情况来简化自动发现.

Nia*_*rne 42

这可能听起来过于简单,但如果您创建了包含命令的脚本文件:

puts $tcl_version
Run Code Online (Sandbox Code Playgroud)

然后运行tclsh sillyscript.tcl,它将在所有平台上执行,假设二进制文件在PATH中.它当然不是花哨的,华而不实的,甚至是整洁的,但它满足了AFAIK的要求.

====

我很好奇,所以我试了一下,没有引号:

echo puts $tcl_version;exit 0 | tclsh
Run Code Online (Sandbox Code Playgroud)

在我的windows box上执行得很好......也许在TCL检测之前进行平台检测是一种选择吗?


Dar*_*nja 24

你也可以这样做.

bash-3.2$ tclsh
% puts $tcl_version
8.6
% info patchlevel
8.6.0
Run Code Online (Sandbox Code Playgroud)

但我认为最好的方法是通过回声.

echo 'puts [info patchlevel];exit 0' | tclsh
echo 'puts $tcl_version;exit 0' | tclsh
Run Code Online (Sandbox Code Playgroud)

=======

奇怪的是,当我试着用引号它不适合我.运行Mac osx

  • 如果您不将 $tcl_version 放在单引号内,bash shell 将尝试将 $tcl_version 替换为名为 tcl_version 的 bash shell 变量中的值。由于 tcl_version 不存在,因此替换为空字符串,将“puts $tcl_version”转换为“puts”。bash shell 中的单引号就像 tcl 中的 {} - 它会停止插值。 (3认同)

Mon*_*hας 8

根据您的shell,它可能是:

tclsh <<< 'puts [info patchlevel]'
Run Code Online (Sandbox Code Playgroud)

  • `info patchlevel` 在我看来优于 `tcl_version`,因为它提供了更完整的版本标签。 (3认同)