【问题标题】:Regex to identify reference to environment variables in bash正则表达式识别 bash 中对环境变量的引用
【发布时间】:2017-09-14 14:47:01
【问题描述】:

我们知道 'eval' 可以做坏事:比如执行代码。 我需要 BASH 中的一种方法,以便能够在字符串中识别使用环境变量的位置,并最终将其替换为其实际值。

例如这是一个复杂得多的非常简单的示例。
文件“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

【问题讨论】:

标签: regex bash variables eval substitution


【解决方案1】:

还没有回答,但是关于这个问题的一些评论。

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

变量扩展也取决于上下文,例如以下不会被替换:

# single quotes
echo '${MYDIR}'

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

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

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

echo ${X[`echo hi >&2`]}

【讨论】:

  • 重点是我不知道 x.dat 包含 ${MYDIR},它可以包含任何东西。
猜你喜欢
  • 2013-07-13
  • 2021-12-15
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2020-07-31
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多