我需要间接引用bash
shell 中的变量。
我基本上想知道你可以make
通过写作做什么$($(var))
。
我尝试过使用${$var}
最直接的解决方案,bash
但随后出现此错误:
bash: ${$var}: bad substitution
有没有办法做到这一点?
我想要做的是使用迭代变量遍历程序的所有参数(,,,...),但如果不使用间接寻址,我就无法做到这$1
一点$2
。$3
答案1
如果你有var1=foo
and foo=bar
,你可以bar
说${!var1}
。但是,如果您想迭代位置参数,几乎可以肯定这样做会更好
for i in "$@"; do
# something
done
答案2
使用/bin/bash
:
foo=bar
test=foo
echo ${!test}
# prints -> bar
答案3
使用 grep + awk
foo=bar
var_name=foo
set | grep -v var_name | grep ^"${var_name}=" | awk -F= '{ print $2 }'
输出将是
bar
为了证明这种方法有效,请检查 bash 脚本:
#!/bin/bash
function show_variable_value() {
name=$1
value=$(set | grep -v name | grep ^"${name}=" | awk -F= '{ print $2 }' )
echo "${value}"
}
foo='bar'
# getting the variable value indirectly from the variable name
value=$(show_variable_value foo)
if [ "${value}" == "${foo}" ]; then
echo "The function returned indirectly the variable value from the variable name >>> '${value}' == '${foo}'"
else
echo "This approach does not work"
fi