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

如何在Bash脚本中解析文件中的变量引用?

解决Bash脚本解析文件中变量引用的问题

原脚本的问题

你写的脚本存在两个核心问题:

  1. LINES=$(echo $(cat file.txt)) 会将文件中的换行符全部替换为空格,导致所有内容变成空格分隔的单词,循环时按单词而非行处理,破坏了原文件的行结构。
  2. 直接echo "$i"不会解析字符串内的变量引用——Bash在双引号中仅对变量做一次解析,$i中的${VARIABLE}只是普通文本,不会被自动替换。

解决方案

方法一:使用eval(仅处理可信文件)

逐行读取文件,通过eval触发Bash对字符串的二次解析,完成变量替换:

VARIABLE=Awesome
while IFS= read -r line; do
  eval "echo \"$line\""
done < file.txt
  • while IFS= read -r line:正确读取每一行内容,保留行内的空格和特殊字符。
  • eval "echo \"$line\"":让Bash重新解析字符串,替换其中的变量引用。

方法二:使用envsubst(更安全高效,推荐)

如果系统安装了gettext工具(主流Linux发行版默认自带),可以直接用envsubst替换文件中的环境变量引用:

VARIABLE=Awesome envsubst < file.txt

envsubst会自动识别输入中的${VARIABLE}格式变量,并用对应的环境变量值替换,无需手动循环,更安全且高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:04:09