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

如何将SwiftDialog输出的键值对提取为Bash独立变量?

解决SwiftDialog输出的键值提取问题

纯Bash循环方案(推荐,易维护)

直接用Bash内置的while read和case语句处理,完美兼容带空格、特殊字符的标签和值:

# 假设fullValue已存储SwiftDialog的输出内容
while IFS=' : ' read -r label_raw value_raw; do
    # 去除标签前后双引号,还原内部转义的双引号
    label=$(sed 's/^"//;s/"$//;s/\\"/"/g' <<< "$label_raw")
    # 同理处理值的引号与转义
    value=$(sed 's/^"//;s/"$//;s/\\"/"/g' <<< "$value_raw")

    # 根据标签名赋值对应变量
    case "$label" in
        "HMS Asset Tag") hmsAssetTag="$value" ;;
        "Room #") roomNumber="$value" ;;
        # 可扩展添加更多标签匹配规则
        "Department") department="$value" ;;
    esac
done <<< "$fullValue"

# 验证提取结果
echo "HMS Asset Tag: $hmsAssetTag"
echo "Room #: $roomNumber"

awk方案(简洁高效)

用awk处理引号和分隔符,生成变量定义语句后导入当前Shell环境:

# 处理输出并生成变量赋值语句,通过source导入当前环境
source <(awk -F' : ' '{
    # 去除前后引号,还原内部转义的双引号
    gsub(/^"|"$/, "", $1)
    gsub(/^"|"$/, "", $2)
    gsub(/\\"/, "\"", $1)
    gsub(/\\"/, "\"", $2)

    # 根据标签输出对应变量的赋值语句
    if ($1 == "HMS Asset Tag") print "hmsAssetTag=\""$2"\""
    else if ($1 == "Room #") print "roomNumber=\""$2"\""
}' <<< "$fullValue")

# 验证提取结果
echo "HMS Asset Tag: $hmsAssetTag"
echo "Room #: $roomNumber"

关键注意事项

  • 必须用' : '(空格+冒号+空格)作为分隔符,避免误分割标签内的字符
  • 处理转义双引号:若用户输入的值包含双引号,SwiftDialog会输出\",需通过gsub或sed还原为普通双引号
  • 标签匹配要严格对应原字符串,包括空格、特殊字符(比如Room #里的#),直接用字符串匹配即可,无需额外转义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:40:17