我有一个shell脚本,使用包含变量名的参数调用它。我希望变量用它们的值替换。考虑下面的例子:它解决了我的问题,但它使用了eval。出于安全原因,我想避免使用eval。
#!/bin/bash
#
# example:
# $> replace.sh arg '$VAR'
# arg value
VAR=value
ARGS=$(eval echo $*)
echo $ARGS
答案 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"