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

如何提取Shell脚本中使用的环境变量?

提取Shell脚本中的环境变量工具方案

我有一些需依赖多个环境变量才能正常运行的大型Shell脚本。手动逐行读取代码提取所有被调用的环境变量不仅十分繁琐,还极易出现遗漏情况。请问是否存在可完成此类任务的脚本或插件?

示例脚本与预期结果

teste.sh:

if [ ! -z "$CI_COMMIT_TAG" ] ; then
  export DOCKER_IMAGE_FULL_NAME="$REGISTRY_URL/$DOCKER_IMAGE_NAME:$CI_COMMIT_TAG"
else
  export DOCKER_IMAGE_FULL_NAME="$REGISTRY_URL/$DOCKER_IMAGE_NAME:pid$CI_PIPELINE_ID"
fi

预期提取的外部依赖变量:

$CI_COMMIT_TAG
$REGISTRY_URL
$DOCKER_IMAGE_NAME
$CI_PIPELINE_ID

可行解决方案

  • 基础正则提取(快速获取所有变量)
    使用grep匹配所有$开头的变量名,自动去重排序:

    grep -o '\$\w\+' teste.sh | sort -u
    

    该命令能快速识别$VAR格式的变量,会包含脚本内部定义的变量(如示例中的DOCKER_IMAGE_FULL_NAME),适合需要提取所有变量引用的场景。

  • 增强版提取(支持带花括号的变量)
    若脚本中存在${VAR}格式的变量,用awk处理更全面:

    awk -F'[$]' '{for(i=2;i<=NF;i++){match($i,/^[a-zA-Z_][a-zA-Z0-9_]*/); if(RSTART) print "$" substr($i,RSTART,RLENGTH)}}' teste.sh | sort -u
    

    此命令兼容$VAR和${VAR}两种格式,同样会包含内部定义的变量。

  • 精准提取外部依赖变量
    用shellcheck静态分析工具过滤出脚本中未定义的外部环境变量(需先安装shellcheck):

    shellcheck teste.sh | grep 'SC2154' | awk '{print "$"$NF}' | sort -u
    

    SC2154是shellcheck检测"未定义变量"的规则,此方法会自动排除脚本内部定义的变量(如示例中的DOCKER_IMAGE_FULL_NAME),只提取真正需要外部传入的环境变量,适合精准排查依赖的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:45:13