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

时间:2019-02-11 06:36:54

标签: unix grep tcl

在尝试将变量值传递给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

不显示与图案匹配的线。

1 个答案:

答案 0 :(得分:1)

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

您想要puts [exec grep $sn myfile]

这是因为exec命令旨在允许将输出捕获到变量(如set output [exec some command])中

interactive tclsh会话中的

*,为方便起见,将打印命令的结果。在非交互式脚本中不是这样。

要继续执行“可怕”注释,您的原始代码没有关于“ true”块结束位置和“ else”块开始位置的视觉提示。由于Tcl具有面向单词的性质,因此非常适合one true brace style缩进样式。