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

如何用Shell提取等号分隔的参数值至独立变量?

提取字符串中指定参数的值

现有字符串 STRING="/something an-arg=some-value another-arg=another-value",需要将an-arg对应的some-value提取到AN_ARG变量,another-arg对应的another-value提取到ANOTHER_ARG变量。以下是几种简洁可行的解决方案:

方案1:纯Bash参数扩展(无外部工具依赖)

利用Bash的参数扩展特性,先截掉参数名之前的内容,再截掉参数值之后的部分:

STRING="/something an-arg=some-value another-arg=another-value"

# 提取an-arg的值
AN_ARG=${STRING#*an-arg=}  # 得到 "some-value another-arg=another-value"
AN_ARG=${AN_ARG%% *}       # 从右截断第一个空格及后续内容,得到 "some-value"

# 提取another-arg的值
ANOTHER_ARG=${STRING#*another-arg=}
ANOTHER_ARG=${ANOTHER_ARG%% *}

# 输出验证
echo "AN_ARG: $AN_ARG"
echo "ANOTHER_ARG: $ANOTHER_ARG"

方案2:使用sed正则匹配

通过sed的正则捕获组直接提取目标值:

STRING="/something an-arg=some-value another-arg=another-value"

AN_ARG=$(sed -n 's/.*an-arg=\([^ ]*\).*/\1/p' <<< "$STRING")
ANOTHER_ARG=$(sed -n 's/.*another-arg=\([^ ]*\).*/\1/p' <<< "$STRING")

echo "AN_ARG: $AN_ARG"
echo "ANOTHER_ARG: $ANOTHER_ARG"

说明:[^ ]*匹配任意非空格字符,精准捕获参数值部分。

方案3:使用awk遍历字段

以=为分隔符遍历字段,匹配目标参数名后提取对应值:

STRING="/something an-arg=some-value another-arg=another-value"

AN_ARG=$(awk -F'=' '{for(i=1;i<=NF;i++){if($i=="an-arg"){print $(i+1)}}}' <<< "$STRING")
ANOTHER_ARG=$(awk -F'=' '{for(i=1;i<=NF;i++){if($i=="another-arg"){print $(i+1)}}}' <<< "$STRING")

echo "AN_ARG: $AN_ARG"
echo "ANOTHER_ARG: $ANOTHER_ARG"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:25:19