将参数中的环境变量替换为shell脚本

时间:2015-10-22 12:57:39

标签: bash shell

我有一个shell脚本,使用包含变量名的参数调用它。我希望变量用它们的值替换。考虑下面的例子:它解决了我的问题,但它使用了eval。出于安全原因,我想避免使用eval。

#!/bin/bash
#
# example:
# $> replace.sh arg '$VAR'
# arg value

VAR=value
ARGS=$(eval echo $*)

echo $ARGS

2 个答案:

答案 0 :(得分:2)

您正在寻找间接变量扩展:

$ SPY1=SPY2
$ SPY2="Lance Link"
$ SPY=${!SPY1}
$ echo $SPY
Lance Link
$ 

答案 1 :(得分:1)

适用于我:

#!/bin/bash
#
# example:
# $> replace.sh arg '$VAR'
# arg value

VAR=value
ARGS=""
for arg in "$@"
do
  arg="${arg/$/}" # remove preceding $ for indirect variable expansion to work
  ARGS="${ARGS} ${!arg}"
done

echo "$ARGS"