我过去曾使用exec从tcl运行过基本的bash命令和awk。
但这一次,我运行了一些复杂的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脚本吗?
发布于 2016-02-24 16:49:31
方括号必须转义:
# 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\]]发布于 2016-02-25 01:30:34
我觉得你是想这么做:
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]https://stackoverflow.com/questions/35597128
复制相似问题