#bash #ksh #var
#bash #ksh #var
Вопрос:
Возможно ли, чтобы bash / ksh вызывал переменную переменной, например:
set -A MY_ARRAY ${${var}_something}
BR
Колесар
Ответ №1:
В 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
Весь фрагмент кода с этого сайта:
#!/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)
Комментарии:
1. Вы уверены в безопасности при этом
eval
использовании?