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

如何在FreeBSD的Bash中提取脚本引用的变量列表?

提取Bash风格引用变量的可行方案

实现思路

通过正则匹配$X或${X}格式的变量引用,提取其中的变量名,再配合排序去重工具完成最终需求。以下是两种适配FreeBSD Bash环境的实现方式:

方式1:用FreeBSD原生grep + sed

直接使用系统自带的grep(启用扩展正则)匹配变量引用,再通过sed剥离前缀,提取纯变量名:

# 提取所有引用的变量名
grep -oE '\$([A-Za-z0-9_]+|\{[A-Za-z0-9_]+\})' 目标脚本文件 | sed -E 's/\$([A-Za-z0-9_]+)|\$\{([A-Za-z0-9_]+)\}/\1\2/g'

# 配合去重排序
grep -oE '\$([A-Za-z0-9_]+|\{[A-Za-z0-9_]+\})' 目标脚本文件 | sed -E 's/\$([A-Za-z0-9_]+)|\$\{([A-Za-z0-9_]+)\}/\1\2/g' | sort | uniq

方式2:用pcregrep(更简洁)

若已通过pkg install pcre安装pcregrep,可利用正向预查直接提取变量名,无需后续处理:

# 提取所有引用的变量名
pcregrep -o '(?<=\$)([A-Za-z0-9_]+)(?=\b)|(?<=\$\{)([A-Za-z0-9_]+)(?=\})' 目标脚本文件

# 配合去重排序
pcregrep -o '(?<=\$)([A-Za-z0-9_]+)(?=\b)|(?<=\$\{)([A-Za-z0-9_]+)(?=\})' 目标脚本文件 | sort | uniq

正则说明

  • 针对$X格式:\$([A-Za-z0-9_]+) 匹配并捕获变量名,(?<=\$)([A-Za-z0-9_]+)(?=\b) 通过正向预查直接定位变量名
  • 针对${X}格式:\$\{([A-Za-z0-9_]+)\} 匹配并捕获变量名,(?<=\$\{)([A-Za-z0-9_]+)(?=\}) 直接提取花括号内的变量名

特殊情况处理

如果脚本中存在转义的\$(非变量引用),可添加反向预查排除这类场景:

grep -oE '(?<!\\)\$([A-Za-z0-9_]+|\{[A-Za-z0-9_]+\})' 目标脚本文件 | sed -E 's/(?<!\\)\$([A-Za-z0-9_]+)|(?<!\\)\$\{([A-Za-z0-9_]+)\}/\1\2/g' | sort | uniq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:05:20