我正在尝试找出如何使bash(强制?)扩展字符串(从文件中加载)中的变量。
我有一个名为“ something.txt”的文件,其内容如下:
hello $FOO world
然后我跑
export FOO=42 echo $(cat something.txt)
这将返回:
即使设置了变量,它也不会扩展$ FOO。我无法评估或获取文件-因为它将尝试执行该文件(它本身不能执行-我只想插入包含变量的字符串)。
有任何想法吗?
我偶然发现了我认为该问题的答案: envsubst命令。
envsubst
envsubst < something.txt
如果您的发行版中尚未提供该功能,请在
gettext
@Rockallite-我写了一些包装脚本来解决’\ $’问题。
(顺便说一句,有一个envsubst的“功能”,在https://unix.stackexchange.com/a/294400/7088上 进行了解释, 该扩展仅用于扩展输入中的某些变量,但是我同意转义异常的功能更多方便。)
这是我的脚本:
#! /bin/bash ## -*-Shell-Script-*- CmdName=${0##*/} Usage="usage: $CmdName runs envsubst, but allows '\$' to keep variables from being expanded. With option -sl '\$' keeps the back-slash. Default is to replace '\$' with '$' " if [[ $1 = -h ]] ;then echo -e >&2 "$Usage" ; exit 1 ;fi if [[ $1 = -sl ]] ;then sl='\' ; shift ;fi sed 's/\\\$/\${EnVsUbDolR}/g' | EnVsUbDolR=$sl\$ envsubst "$@"