加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在常量字符串上应用bash字符串运算符

发布时间:2020-12-15 21:51:12 所属栏目:安全 来源:网络整理
导读:我正在尝试在常量字符串上使用bash字符串运算符.例如,您可以对变量$foo执行以下操作: $foo=a:b:c; echo ${foo##*:}c 现在,如果“a:b:c”字符串是常量,我想有一个更简洁的解决方案,如: echo ${"a:b:c"##*:} 但是,这不是有效的bash语法.有没有办法执行此操
我正在尝试在常量字符串上使用bash字符串运算符.例如,您可以对变量$foo执行以下操作:

$foo=a:b:c; echo ${foo##*:}
c

现在,如果“a:b:c”字符串是常量,我想有一个更简洁的解决方案,如:

echo ${"a:b:c"##*:}

但是,这不是有效的bash语法.有没有办法执行此操作?

[我需要这样做的原因(而不是硬编码替换的结果,即“c”这里)是因为我有一个命令模板,其中“%h”占位符在运行命令之前被某些东西替换;取代的结果被bash视为常数.]

解决方法

使用参数扩展是不可能的.

您可以使用其他命令,如sed / awk / expr.

但我没有看到这个要求.
你可以这样做:

tmp=%h
echo ${tmp##*:}

或者如果速度不是问题,并且您不希望使用不需要的变量使当前环境混乱:

(tmp=%h; echo ${tmp##*:})

无论如何,你最好使用命令模板进行字符串操作或使用像cut这样简单的东西:

# get third filed delimited by :
$cut -d: -f3<<<'a:b:c'
c

或者像awk或sed更复杂:

#get last field separated by ':'
$awk -F: '{print $NF}'<<<'a:b:c'
c
$sed 's/.*:([^:]*)/1/'<<<'a:b:c'
c

取决于你需要什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读