ASH变量间接参考

时间:2009-06-18 18:52:48

标签: unix shell

我正在尝试将一个脚本从BASH移植到ASH(Almquist SHell),并且遇到了间接引用的问题。以下功能

cmd() {
    # first argument is the index to print (ie label)
    arg=$1
    # ditch the first argument
    shift
    # print the label (via indirect reference)
    echo "${!arg}"
}

应该产生以下输出

cmd 1 one two three
one
cmd 2 one two three
two
cmd 3 one two three
three

这在BASH下按预期工作,但在ASH(或DASH)下运行时会生成“语法错误:错误替换”。这有用吗?如果没有,是否有使用间接引用的替代方法?

1 个答案:

答案 0 :(得分:2)

您可以尝试eval

cmd() {
    arg=$1
    shift
    eval "echo \$$arg"
}