如何在Bash脚本中解析文件中的变量引用?
解决Bash脚本解析文件中变量引用的问题
原脚本的问题
你写的脚本存在两个核心问题:
LINES=$(echo $(cat file.txt))会将文件中的换行符全部替换为空格,导致所有内容变成空格分隔的单词,循环时按单词而非行处理,破坏了原文件的行结构。- 直接
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
相关产品推荐
相关产品推荐

