Tcl 如何使用exec运行bash一行程序
我过去使用过Tcl 如何使用exec运行bash一行程序,tcl,tk,Tcl,Tk,我过去使用过exec来运行bash命令和awk以及tcl 但这次我运行了一些复杂的1行程序来编辑变量名 set v "sccmp_hvt_c35_ff_0.99v_125c.lib" set corner_name [exec "echo $v | cut -d'.' --complement -f2- | cut -d'_' --complement -f-5 | tr '[a-z]' '[A-Z]'"] 这不起作用,并将“[a-z]”的错误作为无效命令抛出。 有什么方法可以帮助我通过tcl
exec
来运行bash命令和awk
以及tcl
但这次我运行了一些复杂的1行程序来编辑变量名
set v "sccmp_hvt_c35_ff_0.99v_125c.lib"
set corner_name [exec "echo $v | cut -d'.' --complement -f2- | cut -d'_' --complement -f-5 | tr '[a-z]' '[A-Z]'"]
这不起作用,并将“[a-z]”的错误作为无效命令抛出。
有什么方法可以帮助我通过tcl运行这个bash脚本吗?方括号必须转义:
# wrong
exec echo abc | tr [a-z] [A-Z]
# good
exec echo abc | tr \[a-z\] \[A-Z\]
在你的情况下,我会尝试:
set corner_name [exec "echo $v | cut -d'.' --complement -f2- | cut -d'_' --complement -f-5 | tr \[a-z\] \[A-Z\]"]
编辑
此外,我认为不需要引号:
set corner_name [exec echo $v | cut -d. --complement -f2- | cut -d_ --complement -f-5 | tr \[a-z\] \[A-Z\]]
方括号必须转义:
# wrong
exec echo abc | tr [a-z] [A-Z]
# good
exec echo abc | tr \[a-z\] \[A-Z\]
在你的情况下,我会尝试:
set corner_name [exec "echo $v | cut -d'.' --complement -f2- | cut -d'_' --complement -f-5 | tr \[a-z\] \[A-Z\]"]
编辑
此外,我认为不需要引号:
set corner_name [exec echo $v | cut -d. --complement -f2- | cut -d_ --complement -f-5 | tr \[a-z\] \[A-Z\]]
我想你是想这么做:
set corner_name [string toupper [join [lrange [split [lindex [split $v .] 0] _] 0 3] _]]
puts $corner_name ;# => SCCMP_HVT_C35_FF
你也可以用它
string toupper [regexp -inline {^.*?(?:_.*?){3}(?=_)} $v]
我想你是想这么做:
set corner_name [string toupper [join [lrange [split [lindex [split $v .] 0] _] 0 3] _]]
puts $corner_name ;# => SCCMP_HVT_C35_FF
你也可以用它
string toupper [regexp -inline {^.*?(?:_.*?){3}(?=_)} $v]
尝试过,但在执行时它说没有这样的文件或目录。我是否也需要在剪切后转义,因为它现在会为剪切抛出错误,并说:剪切:分隔符必须是单个字符。我认为您不需要“
字符您是对的,删除”有助于我获得所需的o/p。感谢Unix shell中的Tcl等价于,
是{
..}
。尝试过了,但执行时没有这样的文件或目录。我是否也需要在剪切后转义,因为它现在为剪切抛出了一个错误,即:剪切:分隔符必须是一个字符。我认为您不需要'
字符您是对的,删除“”有助于我获得所需的o/p。感谢Unix shell中与'
等价的Tcl是{
..}
。您希望的输出是什么?是“SCCMP\U HVT\U C35\U FF”吗?您想要的输出是什么?是“SCCMP_HVT_C35_FF”吗?是的,这是所需的输出,您是在tcl中本机完成的,而不是使用shell脚本。谢天谢地,这是您想要的输出,您是在tcl中本机完成的,而不是使用shell脚本。谢谢