在 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 缩进样式。
我在尝试将变量值传递给 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 缩进样式。