【发布时间】:2019-07-31 14:00:59
【问题描述】:
我有一个字符串foo-0,我想将其转换为bar1baz,即解析尾随索引并添加前缀/后缀。尾随索引之前的部分(在这种情况下 foo- 也可以包含数字字符,但不应更改。
我尝试了以下方法:
echo foo-0 | cut -d'-' -f 2 | sed 's/.*/bar&baz/'
但这只能给我一个部分解决方案 (bar0baz)。如何增加中缀变量?
编辑:以下解决方案仅部分适用于我想要实现的目标。这是我的错,因为为了清楚起见,我将上面的示例简化了太多。
最终目标是使用 bash 使用以下语法将环境变量(我们称之为 MY_ENV)设置为输出值:
/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),这将不起作用。
【问题讨论】:
-
如果在子shell中设置环境变量,不会影响父环境。