在 Tcl 脚本中将变量传递给 grep 命令

Passing variables to grep command in Tcl Script

我在尝试将变量值传递给 grep 命令时遇到问题。

本质上,我想grep 找出与我的模式匹配的行,并将模式存储在一个变量中。我接收来自用户的输入,并通过 myfile 进行解析并查看模式是否存在(这里没问题)。

如果存在,我想显示具有模式 i.e grep it out.

的行

我的代码:

if {$a==1} {
      puts "serial number exists"
      exec grep $sn myfile } else {
      puts "serial number does not exist"}

我的输入:SN02

我在 Shell 终端中 运行 grep 时的结果( grep "SN02" myfile):

serial number exists
SN02 xyz rtw 345
SN02 gfs rew 786

我尝试执行时的结果 grep in Tcl script:

serial number exists

不显示符合模式的行。

你的(可怕的 IMO)缩进实际上不是问题所在。问题是 exec 不会自动打印执行命令的输出*。

你想要puts [exec grep $sn myfile]

这是因为 exec 命令被设计成允许在变量中捕获输出(如 set output [exec some command]

* 在 interactive tclsh 会话中,为方便起见,打印命令的结果。在非交互式脚本中并非如此。

要跟进 "horrible" 评论,您的原始代码没有关于 "true" 块结束位置和 "else" 块开始位置的视觉提示。由于 Tcl 的面向单词的特性,它很好地要求 one true brace style 缩进样式。