我想从输入字符串中删除最后4个字符,然后在sed命令中使用它。但我无法使其正常工作
newversion是一个输入参数,它设置为:5.5.5-dev。
我想从输入参数中删除-dev。
我试过的
version=${$newversion::-4}
sed -i "s|\(<<some name i defined>>/$imagename:\)\([^\n]*\)|\1$version|" docker-compose.yml
错误:
替代不良
最佳答案
sed
对于此问题是过大的。要从任何POSIX shell中的字符串末尾删除-dev
,请使用
version=${newversion%-dev}
或更一般地
version=${newversion%-???} # Remove the final - and the next 3 characters
甚至
version=${newversion%-*} # Remove the final - and anything after it.
如果您使用的是
bash
(看起来好像不是),则您的第一次尝试已经结束;您只是有一个额外的$
。它应该是version=${newversion::-4}
尽管该位置的负值需要
bash
4。在bash
3中,您需要使用字符串的长度来计算值:version=${newversion::${#newversion}-4}