我想从输入字符串中删除最后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}

尽管该位置的负值需要bash4。在bash 3中,您需要使用字符串的长度来计算值:
version=${newversion::${#newversion}-4}

08-07 16:19