shell中间接扩展变量

shell中间接扩展变量

我需要间接引用bashshell 中的变量。

我基本上想知道你可以make通过写作做什么$($(var))

我尝试过使用${$var}最直接的解决方案,bash但随后出现此错误:

bash: ${$var}: bad substitution

有没有办法做到这一点?

我想要做的是使用迭代变量遍历程序的所有参数(,,,...),但如果不使用间接寻址,我就无法做到这$1一点$2$3

答案1

如果你有var1=fooand 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

相关内容