2011-11-11 58 views

回答

6

在bash:

VAR1=aap 
VAR2=noot 

USEVARNAME=VAR2 
echo ${!USEVARNAME} 

USEVARNAME=VAR1 
echo ${!USEVARNAME} 

打印

noot 
aap 
2

你可能指的間接引用:http://tldp.org/LDP/abs/html/ivr.html

# Indirect reference. 
eval a=\$$a 

的代碼整個片斷從是s ITE:

#!/bin/bash 
# ind-ref.sh: Indirect variable referencing. 
# Accessing the contents of the contents of a variable. 

# First, let's fool around a little. 

var=23 

echo "\$var = $var"   # $var = 23 
# So far, everything as expected. But ... 

echo "\$\$var = $$var"   # $$var = 4570var 
# Not useful ... 
# \$\$ expanded to PID of the script 
# -- refer to the entry on the $$ variable -- 
#+ and "var" is echoed as plain text. 
# (Thank you, Jakob Bohm, for pointing this out.) 

echo "\\\$\$var = \$$var"  # \$$var = $23 
# As expected. The first $ is escaped and pasted on to 
#+ the value of var ($var = 23). 
# Meaningful, but still not useful. 

# Now, let's start over and do it the right way. 

# ============================================== # 


a=letter_of_alphabet # Variable "a" holds the name of another variable. 
letter_of_alphabet=z 

echo 

# Direct reference. 
echo "a = $a"   # a = letter_of_alphabet 

# Indirect reference. 
    eval a=\$$a 
# ^^^  Forcing an eval(uation), and ... 
#  ^ Escaping the first $ ... 
# ------------------------------------------------------------------------ 
# The 'eval' forces an update of $a, sets it to the updated value of \$$a. 
# So, we see why 'eval' so often shows up in indirect reference notation. 
# ------------------------------------------------------------------------ 
    echo "Now a = $a" # Now a = z 

echo 

# Now, let's try changing the second-order reference. 

t=table_cell_3 
table_cell_3=24 
echo "\"table_cell_3\" = $table_cell_3"   # "table_cell_3" = 24 
echo -n "dereferenced \"t\" = "; eval echo \$$t # dereferenced "t" = 24 
# In this simple case, the following also works (why?). 
#   eval t=\$$t; echo "\"t\" = $t" 

echo 

t=table_cell_3 
NEW_VAL=387 
table_cell_3=$NEW_VAL 
echo "Changing value of \"table_cell_3\" to $NEW_VAL." 
echo "\"table_cell_3\" now $table_cell_3" 
echo -n "dereferenced \"t\" now "; eval echo \$$t 
# "eval" takes the two arguments "echo" and "\$$t" (set equal to $table_cell_3) 
+0

你肯定安全這個'eval'使用? –

相關問題