2009-06-18 53 views
1

我試圖將腳本從BASH移植到ASH(Almquist SHell),並且遇到間接引用的問題。當下ASH(或DASH)運行:下面的函數ASH可變間接引用

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作爲預期,但產生一個「錯誤的替換語法錯誤」。這應該工作嗎?如果沒有,是否有替代使用間接引用?

回答

1

你可以嘗試eval

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

這幾乎正是我來到了剛剛發佈 回聲後 「$(EVAL回聲\ $$ ARG)」 – ctuffli 2009-06-18 20:06:56