首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用exec运行bash one liners

如何使用exec运行bash one liners
EN

Stack Overflow用户
提问于 2016-02-24 16:39:30
回答 2查看 609关注 0票数 0

我过去曾使用exec从tcl运行过基本的bash命令和awk

但这一次,我运行了一些复杂的1行代码来编辑变量名。

代码语言:javascript
复制
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脚本吗?

EN

回答 2

Stack Overflow用户

发布于 2016-02-24 16:49:31

方括号必须转义:

代码语言:javascript
复制
# wrong
exec echo abc | tr [a-z] [A-Z]

# good
exec echo abc | tr \[a-z\] \[A-Z\]

在您的情况下,我会尝试:

代码语言:javascript
复制
set corner_name [exec "echo $v | cut -d'.' --complement -f2- | cut -d'_' --complement -f-5 | tr \[a-z\] \[A-Z\]"]

编辑

此外,我认为不需要引号:

代码语言:javascript
复制
set corner_name [exec echo $v | cut -d. --complement -f2- | cut -d_ --complement -f-5 | tr \[a-z\] \[A-Z\]]
票数 2
EN

Stack Overflow用户

发布于 2016-02-25 01:30:34

我觉得你是想这么做:

代码语言:javascript
复制
set corner_name [string toupper [join [lrange [split [lindex [split $v .] 0] _] 0 3] _]]
puts $corner_name   ;# => SCCMP_HVT_C35_FF

您还可以通过以下方式获得

代码语言:javascript
复制
string toupper [regexp -inline {^.*?(?:_.*?){3}(?=_)} $v]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35597128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档