首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UNIX从变量中删除字符

UNIX从变量中删除字符
EN

Stack Overflow用户
提问于 2016-02-01 20:23:56
回答 3查看 4.5K关注 0票数 4

我想从输入字符串中删除最后4个字符,然后在sed命令中使用它。但是我不能让它正常工作

newversion为入参,设置为: 5.5.5-dev。我想从输入参数中删除-dev。

我尝试过的:

代码语言:javascript
运行
复制
version=${$newversion::-4}
sed -i "s|\(<<some name i defined>>/$imagename:\)\([^\n]*\)|\1$version|" docker-compose.yml

错误:

糟糕的替换

EN

回答 3

Stack Overflow用户

发布于 2016-02-01 23:05:14

对于这个问题,sed是过度杀伤力。要从任何POSIX shell中的字符串末尾删除-dev,请使用

代码语言:javascript
运行
复制
version=${newversion%-dev}

或者更一般地说

代码语言:javascript
运行
复制
version=${newversion%-???}  # Remove the final - and the next 3 characters

甚至是

代码语言:javascript
运行
复制
version=${newversion%-*}  # Remove the final - and anything after it.

如果您使用的是bash (看起来并不是这样),那么您的第一次尝试是close;您只是有了一个额外的$。它应该是

代码语言:javascript
运行
复制
version=${newversion::-4}

尽管该位置的负值需要bash 4。在bash 3中,您需要使用字符串的长度来计算值:

代码语言:javascript
运行
复制
version=${newversion::${#newversion}-4}
票数 8
EN

Stack Overflow用户

发布于 2016-02-01 20:33:09

如果$newversion包含"5.5.5-dev“。即newversion="5.5.5-dev"

为什么不尝试使用sed来删除-dev。

代码语言:javascript
运行
复制
version=`echo $newversion | sed "s/-dev//g"`

或者如果您使用的是bash

代码语言:javascript
运行
复制
version=`sed "s/-dev//g"<<<$newversion`
票数 2
EN

Stack Overflow用户

发布于 2016-02-01 20:54:34

代码语言:javascript
运行
复制
version="$(echo $newversion | sed 's/-dev//g')"
sed -i "s|\(<<some name i defined>>/$imagename:\)\([^\n]*\)|\1$version|" docker-compose.yml

原来我们需要将它包装在一个名为$()的方法中,这就是解决方案。在Sudheesh shetty的帮助下

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35130474

复制
相关文章

相似问题

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