正则表达式在bash中识别对环境变量的引用

时间:2017-09-14 14:47:01

标签: regex bash variables eval substitution

我们知道'eval'可以做坏事:就像执行代码一样。 我需要在BASH中使用一种方法来识别使用环境变量的字符串,并最终用它的实际值替换它。

e.g。这是一个非常简单的例子,更为复杂 文件“x.dat”包含:

$MYDIR/file.txt

环境

export MYDIR=/tmp/somefolder

脚本“x.sh”

...
fileToProcess=$(cat x.dat)
realFileToProcess=$(eval echo $fileToProcess)
echo $realFileToProcess
...

请记住,字符串中引用的环境变量也可以是:

${MYDIR}_txt
$MYDIR-txt
${MYDIR:0:3}:txt
${MYDIR:5}.txt

1 个答案:

答案 0 :(得分:0)

还没有关于这个问题的一些评论。

您需要的不是变量扩展,而是模板中的令牌替换,具体取决于用例pip可能就足够了。

变量扩展还取决于上下文,例如以下内容未被替换:

printf

还应注意,变量扩展可以执行任意代码:

# single quotes
echo '${MYDIR}'

# ANSI-C quotes
echo $'${MYDIR}'

# heredoc with end marker enclosed between single quotes
cat << 'END'
${MYDIR}
END