bash - 如何在 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
.
解决方案
您可以使用awk
:
awk -F- '{print "bar" $2+1 "baz"}' <<< 'foo-0'
bar1baz
推荐阅读
- php - 如何将表格中选定的行 ID 提供给我的模型?
- php - 在 php 中设置多个链接的样式
- c# - “NullValueHandling.Ignore”是否仅适用于 POCO?
- bash - 如何在bash中转义base64编码字符串中的引号?
- php - Laravel 5.8:引导数据表的雄辩分页
- javascript - 如何使用 SwiftSoup 抓取重定向的特定网站?
- html - 带有变量的SVG过滤器?
- android - Android - 如何在内部存储中保存数组
- cuda - 使用 CUDA 流和 memCpyAsync 的错误结果,添加 cudaDeviceSynchronize 变得正确
- java - ImageMetadataReader.readMetadata(file) 缺少数据