You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Shell单行命令生成含CamelCase变量名的变量列表

单行Shell命令实现变量列表生成

需求

用单行Shell命令处理输入文本,生成符合以下规则的变量列表:

  • 每个条目格式:变量名.$ : "原值"
  • 变量名规则:先去除字符串开头的/、.、-字符,再将剩余内容按/、.、-拆分,每个拆分后的部分首字母大写,拼接成无分隔符的CamelCase格式
  • 原值:完全保留输入行的原始内容

输入示例

auto-scaling/v2/HorizontalPodAutoscaler
v1/Service
apiextensions.k8s.io/v1/CustomResourceDefinition

预期输出

AutoScalingV2HorizontalPodAutoscaler.$ : "auto-scaling/v2/HorizontalPodAutoscaler"
V1Service.$ : "v1/Service"
ApiextensionsK8sIoV1CustomResourceDefinition.$ : "apiextensions.k8s.io/v1/CustomResourceDefinition"

解决方案

方案1:使用awk实现(逻辑清晰易维护)

单行命令:

awk '{orig=$0; sub(/^[-./]+/, "", orig); split(orig, parts, /[-./]/); var=""; for(i=1; i<=length(parts); i++){part=parts[i]; var=var toupper(substr(part,1,1)) substr(part,2)}; print var ".$ : \"" $0 "\""}'

命令解释

  1. orig=$0:保存当前行的原始内容,用于后续输出原值
  2. sub(/^[-./]+/, "", orig):移除字符串开头的所有-、.、/字符
  3. split(orig, parts, /[-./]/):用-、.、/作为分隔符,将处理后的字符串拆分为数组parts
  4. 循环遍历数组,将每个元素的首字母转为大写后拼接,生成最终的变量名
  5. print var ".$ : \"" $0 "\"":按照要求的格式拼接变量名和原始值并输出

方案2:使用sed实现(纯文本处理更简洁)

单行命令:

sed -r 'h; s/(^|[-_/\.]+)([0-9a-z])/\U\2/g; s/[-_/\.]+//g; G; s/(.*)\n(.*)/\1.$ : "\2"/'

命令解释

  1. h:将当前行内容存入sed的临时缓存区(hold space)
  2. s/(^|[-_/\.]+)([0-9a-z])/\U\2/g:将所有分隔符(-、_、/、.)后的小写字母转为大写
  3. s/[-_/\.]+//g:移除所有剩余的分隔符,得到纯CamelCase格式的变量名
  4. G:将缓存区中保存的原始行内容追加到当前处理后的内容后
  5. s/(.*)\n(.*)/\1.$ : "\2"/:将两部分内容拼接为需求的输出格式

测试验证

将输入示例保存为input.txt,运行任意一个命令:

# awk版本
awk '{orig=$0; sub(/^[-./]+/, "", orig); split(orig, parts, /[-./]/); var=""; for(i=1; i<=length(parts); i++){part=parts[i]; var=var toupper(substr(part,1,1)) substr(part,2)}; print var ".$ : \"" $0 "\""}' input.txt

# sed版本
sed -r 'h; s/(^|[-_/\.]+)([0-9a-z])/\U\2/g; s/[-_/\.]+//g; G; s/(.*)\n(.*)/\1.$ : "\2"/' input.txt

均可得到与预期一致的输出结果。

内容的提问来源于stack exchange,提问作者TheCodeKiller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:17:48