2013-08-02 16 views

risposta

17

È possibile utilizzare bash dichiarano direttiva e indirezione caratteristica come questo:

p_val="foo" 
active_id=$p_val 
declare "flag_$active_id"="100" 

TEST:

> set | grep flag 
flag_foo=100 

UPDATE:

p_val="foo" 
active_id="$p_val" 
v="flag_$active_id" 
declare "$v"="100" 

> echo "$v" 
flag_foo 
> echo "${!v}" 
100 

Utilizzo in if condition:

if [ "${!v}" -ne 100 ]; then 
    echo "yes" 
else 
    echo "no" 
fi 

# prints no 
+0

grazie anubhava, ma sto ricevendo errore in questo codice: se [flag_ $ active_id -ne 100] then ... else ... –

+0

@ShivamAgrawal: Controlla la mia sezione ** Update **, ho fornito un esempio del suo uso in 'if then ... else ... fi' block. – anubhava

+0

qual è il significato del punto e virgola qui "se [" $ {! V} "-ne 100];" –

5

Non so a cosa serva, ma è possibile ottenere cose del genere con la dichiarazione eval di bash.

Il seguente codice lo illustra.

#!/bin/bash 

p_val="TEST" 
active_id=$p_val 

eval "flag_$active_id=100" 

echo $flag_TEST 
eval "echo \$flag_$active_id" 

La terminazione echo 's mette

100 
100 

sul stdout.

+0

Solo una parola amichevole attenzione, mentre questo funzionerà, eval è un super pericoloso, specialmente sul guscio. quindi non usare mai nulla che provenga dall'input dell'utente. mai. –

Problemi correlati