gpt4 book ai didi

linux - 强制 bash 扩展从文件加载的字符串中的变量

转载 作者:IT老高 更新时间:2023-10-28 12:29:46 26 4
gpt4 key购买 nike

我正在尝试研究如何使 bash(强制?)扩展字符串(从文件中加载)中的变量。

我有一个名为“something.txt”的文件,内容如下:

hello $FOO world

然后我跑

export FOO=42
echo $(cat something.txt)

返回:

   hello $FOO world

即使设置了变量,它也没有扩展 $FOO。我无法评估或获取文件 - 因为它会尝试执行它(它不是可执行的 - 我只想要插入变量的字符串)。

有什么想法吗?

最佳答案

我偶然发现了这个问题的答案:envsubst 命令:

echo "hello \$FOO world" > source.txt
export FOO=42
envsubst < source.txt

这输出:hello 42 world

如果您想继续处理文件 destination.txt 中的数据,请将其推送回如下文件:

envsubst < source.txt > destination.txt

如果它在您的发行版中不可用,它位于GNU 软件包 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 "$@"

关于linux - 强制 bash 扩展从文件加载的字符串中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10683349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com