如何使用exec运行bash one liners

时间:2016-02-24 08:39:30

标签: 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]'"]

这不起作用并将error for '[a-z]'作为无效命令抛出。 有什么方法可以帮助我通过tcl运行这个bash脚本吗?

2 个答案:

答案 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]