Linux Bash中cat文本文件时如何替换输出已声明的变量值
实现查看文件时自动解析替换Shell变量的方法
现有场景
- 存在文本文件
test.txt,文件内容为字面量字符串$test - 终端已声明变量:
test=hello - 直接执行
cat test.txt仅会输出原字符串$test,无法获取变量对应的实际值
可用方案
方案1:使用envsubst(最推荐,专门用于环境变量替换)
首先需要将变量导出为环境变量,否则工具无法识别:
export test=hello
直接执行以下命令即可输出替换后的内容:
envsubst < test.txt
执行后终端会输出变量实际值hello。
提示:如果需要把替换后的内容永久写入原文件,不要直接重定向到原文件(会清空文件内容),可以用临时文件中转:
envsubst < test.txt > tmp.txt && mv tmp.txt test.txt如果文件中存在不需要替换的
$开头字面量,可以指定仅替换目标变量,比如envsubst '${test}' < test.txt就只会替换$test,其余内容保持不变。
方案2:使用eval+echo(适合无envsubst的精简系统)
不需要额外安装工具,直接用Shell内置能力即可实现:
eval "echo \"$(cat test.txt)\""
原理是先读取文件全量内容,再通过eval触发Shell的变量解析逻辑,完成替换后输出。
方案3:使用perl做正则替换(适合复杂多变量替换场景)
如果文件中存在大量不同的变量需要批量替换,可以用Perl一行命令处理:
perl -pe 's/\$(\w+)/$ENV{$1}/g' test.txt
命令会自动匹配文件中所有$+变量名格式的内容,替换为当前Shell环境中对应变量的实际值。
- 以上所有命令默认都不会修改原文件,仅将替换后的结果打印到终端,确认替换结果符合预期后再写回文件即可。
内容的提问来源于stack exchange,提问作者Nemsis
相关产品推荐
相关产品推荐

