在尝试将变量值传递给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
不显示与图案匹配的线。
答案 0 :(得分:1)
您的(可怕的IMO)缩进实际上不是问题所在。问题是exec
不会自动打印执行命令的输出*。
您想要puts [exec grep $sn myfile]
这是因为exec命令旨在允许将输出捕获到变量(如set output [exec some command]
)中
*,为方便起见,将打印命令的结果。在非交互式脚本中不是这样。
要继续执行“可怕”注释,您的原始代码没有关于“ true”块结束位置和“ else”块开始位置的视觉提示。由于Tcl具有面向单词的性质,因此非常适合one true brace style缩进样式。