2009-06-18 10 views
1

J'essaie de porter un script de BASH à ASH (Almquist SHell) et je rencontre un problème avec des références indirectes. La fonction suivanteASH référence indirecte variable

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}" 
} 

devrait produire la sortie suivante

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

Cela fonctionne comme prévu sous BASH, mais génère une "erreur de syntaxe: Bad substitution" lorsqu'il est exécuté sous ASH (ou DASH). Est-ce que cela devrait fonctionner? Si non, existe-t-il une alternative à l'utilisation de références indirectes?

Répondre

1

Vous pouvez essayer eval:

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

C'est presque exactement ce que je suis venu avec juste après avoir affiché echo "$ (eval echo \ $$ arg)" – ctuffli

Questions connexes