如何在Bash脚本中提取键值对并将值赋值给自定义变量
Bash提取指定字符串键值对到变量的解决方案
你的现有awk逻辑已经完成了核心的键值拆分,只要把拆分结果转为shell可识别的赋值语句即可实现变量写入,以下是两种可直接使用的实现:
方法1:自动批量生成目标变量(适合键值对多的场景)
自动将驼峰格式的键转为你需要的小写蛇形格式变量名,无需手动逐个定义:
# 遍历awk拆分出的键值对完成赋值 while IFS='=' read -r key value; do # 驼峰键名转小写蛇形:FirstName -> first_name snake_key=$(echo "$key" | sed -r 's/([A-Z])/_\1/g' | sed 's/^_//' | tr '[:upper:]' '[:lower:]') declare "$snake_key=$value" done < <(echo "$info" | awk -F'[{};=]' '{for(i=2;i<NF-1;i+=2) print $i"="$(i+1)}')
方法2:手动逐个提取(适合键值对少的场景)
逻辑更简单直观,避免循环处理的额外开销:
# 用grep正则匹配提取对应值 first_name=$(echo "$info" | grep -oP 'FirstName=\K[^;]+') last_name=$(echo "$info" | grep -oP 'LastName=\K[^;]+') gender=$(echo "$info" | grep -oP 'Gender=\K[^;]+') status=$(echo "$info" | grep -oP 'Status=\K[^;]+')
效果验证
执行赋值后直接调用变量即可:
echo $first_name # 输出Tom echo $last_name # 输出White echo $gender # 输出Male echo $status # 输出Married
注意事项
如果你的值中包含分号、等号这类特殊分隔符,需要提前调整awk/grep的匹配规则,避免值被意外截断。
内容的提问来源于stack exchange,提问作者oladapo Esan
相关产品推荐
相关产品推荐

