当前位置: 首页 > 面试题库 >

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

寇靖
2023-03-14
问题内容

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

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

hello $FOO world

然后我跑

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

这将返回:

   hello $FOO world

即使设置了变量,它也不会扩展$ FOO。我无法评估或获取文件-因为它将尝试执行该文件(它本身不能执行-我只想插入包含变量的字符串)。

有任何想法吗?


问题答案:

我偶然发现了我认为该问题的答案: envsubst命令。

envsubst < something.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  "$@"


 类似资料:
  • ES6加强了对Unicode的支持,并且扩展了字符串对象。 字符的Unicode表示法 JavaScript允许采用\uxxxx形式表示一个字符,其中“xxxx”表示字符的码点。 "\u0061" // "a" 但是,这种表示法只限于\u0000——\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表达。 "\uD842\uDFB7" // "

  • 在JSP页面中,我可以使用JSTL加载xml文件,从xml文件路径或url加载到JSTL变量,如下所示: 现在,如果我的xml文件在String变量而不是文件系统中,我如何做完全相同的事情? 说我有 如何将其导入jstl var“xmldocument”? 谢谢。

  • 问题内容: 如何在bash中的文件路径中检查字符串?我在尝试: 用路径中的冒号(:)替换所有正斜杠。没用 Bash将文件路径字符串视为文件路径,并引发错误“无此类文件或目录”。目的是将文件路径视为字符串。 例如:filePathVar可能是 ** / myloc / src / File.java 在这种情况下,检查应返回true。 请注意,作为构建步骤,我正在Jenkins作业中编写此脚本。 以

  • 问题内容: 我想通过目录递归迭代和修改某一分机的所有文件的扩展名,说来。bash命令执行此操作是什么? 问题答案: 如果您有可用的重命名,请使用: 如果重命名不可用,请使用:

  • 但我仍然无法执行给定目录中的程序: 这里出了什么问题?如何正确扩展路径变量?