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

如何将文件中的变量作为命名参数传递给Bash脚本?

在Bash中将键值对文件转为命名参数传递给脚本

我有一个格式为VARIABLE=value的文本文件,示例内容如下:

PID=123123
WID=569569
TOKEN=456456456

其中VARIABLE仅包含大写字母,value仅包含字母数字字符([a-zA-Z0-9])。我希望将这些变量以命名参数(选项)的形式传递给脚本,例如:

./script.sh --PID 123123 --WID 569569 --TOKEN 456456456

请问在Bash中是否有简便的实现方法?我已参考过两个Stack Overflow问题:

  • 涉及位置参数与命名参数的问题
  • 涉及从键值对文件设置环境变量的问题

实现方法

方法1:用xargs快速转换

这是最简洁的方式,通过sed处理每行格式后,用xargs传递参数:

xargs -a <(sed 's/=/ /; s/^/--/' vars.txt) ./script.sh
  • sed的作用:将每行的=替换为空格,并在开头添加--,把KEY=VAL转为--KEY VAL
  • xargs -a <(...):读取处理后的内容,作为参数传递给目标脚本

方法2:数组存储参数(更安全通用)

如果需要更稳妥的处理(比如后续可能扩展值的格式),可以用数组存储参数:

params=()
while IFS='=' read -r key val; do
    params+=( "--$key" "$val" )
done < vars.txt
./script.sh "${params[@]}"
  • IFS='=' read -r key val:按=分割每行,分别读取键和值,-r防止反斜杠被转义
  • 数组展开"${params[@]}":确保每个参数被正确识别,即使值包含特殊字符(当前场景用不到,但扩展性强)

方法3:eval拼接(仅适用于安全内容)

如果能100%确认文件内容无恶意字符,也可以用eval快速拼接命令:

eval "./script.sh $(sed 's/=/ /; s/^/--/' vars.txt)"

注意:eval会执行字符串中的命令,若文件包含特殊字符或恶意代码,会造成安全风险,谨慎使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:13:12