gpt4 book ai didi

linux - 扩展文件中的已知环境并保留其他环境

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:42 25 4
gpt4 key购买 nike

我确信有一种非常简单的方法可以做到这一点。我正在尝试获取一个包含一些环境变量的文件并对其进行扩展,以便将已知的那些扩展到它们的值,而那些不是已知的则单独保留。

例如,如果我的文件包含以下内容:

${I_EXIST}
${I_ALSO_EXIST}
${I_DONT_EXIST}

这将扩展为:

existValue
alsoExistValue
${I_DONT_EXIST}

理想情况下,我希望尽可能简单地执行此操作,因此我不想使用 sed、awk 或 perl 进行复杂的替换。我在想类似于“这里”文件的东西,但除了我无法获得正确的语法这一事实之外,它还会消除任何不展开的内容。例如:

cat <<EOF
> ${I_EXIST}
> ${I_ALSO_EXIST}
> ${I_DONT_EXIST}
EOF
existValue
alsoExistValue

(即最后一个值扩展为空)

更新

我真的应该明确表示我在考虑每行可能有不止一个替换。我确实找到了一种方法,如果我们不关心文件中显示为 ${MYVAR} 的变量,但也许 MYVAR 会这样做:

m4 $( env | sed 's/\([A-Za-z0-9]*\)=\([\/A-Za-z_0-9:|%*.-@] *\)/-D\1=\2' ) 我的文件

这使用 M4 预处理器替换您环境中的所有对。这里有几个问题:

  1. 对 reg exp 的事情感到抱歉。它看起来很讨厌,我相信有更好的表达方式。如果我的环境变量中有空格或集合中没有的任何异常字符,我会发现问题。
  2. 当然,这是一个生硬的替换工具(我试图避免这种情况),因此当您不希望它发生时,变量可能会被替换。

最佳答案

#!/bin/bash

while read a;
do
n=$(eval echo $a)

if [[ "$n" == "" ]]
then
echo $a
else
echo $n
fi

done < input

以此为输入

${HOME}
${nonexistent}

给予

/home/myuser
${nonexistent}

关于linux - 扩展文件中的已知环境并保留其他环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6384857/

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