如何使用#!/ bin / sh(POSIX sh)按名称查找变量?

时间:2014-10-13 10:27:58

标签: linux sh

f1="filename1";
i=1;
c=f$i
echo $c

我应该使用什么shell命令,以便echo $c返回" filename1"作为输出?

4 个答案:

答案 0 :(得分:4)

使用变量间接。

#!/bin/bash
f1="filename1";
i=1;
c=f$i
echo ${!c}  

它适用于bash(GNU bash,版本4.1.2(1) - 发行版)。我没有尝试过其他炮弹。

答案 1 :(得分:1)

避免像eval这样的密集操作。使用关联数组。

#!/bin/bash
typeset -A c
c[f1]=filename1
i=1
echo ${c[f$i]}

答案 2 :(得分:0)

您可以使用eval来"嵌套"变量替换。

f1="filename1";
i=1;
eval c=\${f$i}
echo $c

答案 3 :(得分:0)

可重用功能

# Expand the variable named by $1 into its value. Works in both {ba,z}sh
# eg: a=HOME $(var_expand $a) == /home/me
var_expand() {
  if [ -z "${1-}" ] || [ $# -ne 1 ]; then
    printf 'var_expand: expected one argument\n' >&2;
    return 1;
  fi
  eval printf '%s' "\"\${$1?}\""
}

在给出警告时会发出警告:

  • 空输入
  • 不止一个论点
  • 未设置的变量名