我过去曾使用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]'"]
这不起作用并将error for '[a-z]'
作为无效命令抛出。
有什么方法可以帮助我通过tcl运行这个bash脚本吗?
答案 0 :(得分:2)
方括号必须转义:
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\]]
修改强>
此外,我认为不需要引号:
|
|--ESAPI.properties
|--esapi
|--antisamy-esapi.xml
答案 1 :(得分:1)
我认为你正在尝试这样做:
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]