首页 > 解决方案 > 如何在 Bash 中增加中缀变量?

问题描述

我有一个foo-0要转换为的字符串bar1baz,即解析尾随索引并添加前缀/后缀。尾随索引之前的部分(在这种情况下foo-也可以包含数字字符,但不应更改这些字符。

我尝试了以下方法:

echo foo-0 | cut -d'-' -f 2 | sed 's/.*/bar&baz/'

但这给了我一个部分解决方案(bar0baz)。如何增加中缀变量?

编辑:以下解决方案仅部分适用于我想要实现的目标。这是我的错,因为为了清楚起见,我把上面的例子简化了太多。

MY_ENV最终目标是使用 bash 使用以下语法将环境变量(我们称之为)设置为输出值:

/bin/sh -c "echo $var | ... (some bash magic to replace the trailing index) | ... (some bash magic to set MY_ENV=the output of the pipe)"

旁注:我使用的原因/bin/sh -c "..."是因为我想在 Kubernetes YAML 中使用该命令。

部分解决方案(使用awk

这有效:

echo foo-0 | awk -F- '{print "bar" $2+1 "baz"}'

这不是(输出为1baz):

/bin/sh -c "echo foo-0 | awk -F- '{print \"bar\" $2+1 \"baz\"}'

部分解决方案(使用算术上下文和参数扩展)

$ var=foo-0
$ echo "bar$((${var//[![:digit:]]}+1))baz"

如果var在尾随索引之前包含其他数字字符(例如,对于var foo=r2a-foo-0.

标签: bashawkpipe

解决方案


您可以使用awk

awk -F- '{print "bar" $2+1 "baz"}' <<< 'foo-0'

bar1baz

推荐阅读