我们知道'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
答案 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