免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1633 | 回复: 8
打印 上一主题 下一主题

请教一个取一个根据输入变量名取变量的值的问题 [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-08-15 14:56:13
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-19 10:44 |只看该作者 |倒序浏览
例如,已经有:
a=b
b=c
c=d

当前有变量x,x存的是我想取的变量的名称,例如:
x=a

要根据x的值取a的值,可以用如下的方法(看着比较土,哪位可以给一个更好的方法?):
root@myhost # eval "echo $`echo $x`"
b
root@myhost #

问题,如果要继续取下去呢?例如,如何从x的值取到b的值?

论坛徽章:
1
巨蟹座
日期:2014-08-15 14:56:13
2 [报告]
发表于 2012-03-19 10:47 |只看该作者
本帖最后由 Gubuntu 于 2012-03-19 10:48 编辑

自己搞了一个,感觉更土了

root@myhost # y=$(eval "echo $`echo $x`")
root@myhost # eval "echo $`echo $y`"
c
root@myhost #

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2012-03-19 11:11 |只看该作者
回复 2# Gubuntu

$ a=b; b=c; c=d; x=a; echo $x; y=${!x}; echo ${!y}
a
c

   

论坛徽章:
0
4 [报告]
发表于 2012-03-19 11:13 |只看该作者
本帖最后由 Perl_Er 于 2012-03-19 11:30 编辑

a="HELLO"
-bash-3.2$ x=a
-bash-3.2$ eval echo \$$x
HELLO

论坛徽章:
0
5 [报告]
发表于 2012-03-19 11:20 |只看该作者
echo ${!x}

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
6 [报告]
发表于 2012-03-19 11:49 |只看该作者
  1. [winway@winway ~]$ echo $x
  2. a
  3. [winway@winway ~]$ echo ${!x}         
  4. b
  5. [winway@winway ~]$ eval echo \${!x}   
  6. c
  7. [winway@winway ~]$ eval echo \${!${!x}}
  8. d
复制代码

论坛徽章:
1
巨蟹座
日期:2014-08-15 14:56:13
7 [报告]
发表于 2012-03-19 11:58 |只看该作者
都很犀利呀,学习了

论坛徽章:
1
巨蟹座
日期:2014-08-15 14:56:13
8 [报告]
发表于 2012-03-19 12:00 |只看该作者
本帖最后由 Gubuntu 于 2012-03-19 12:01 编辑

回复 4# Perl_Er


    抓到规律啦

# eval eval echo \\$\$$x
c
# eval eval eval echo \\\\$\\$\$$x
d

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
9 [报告]
发表于 2012-03-19 13:19 |只看该作者
回复 8# Gubuntu


$ cat deep.sh

deep(){
  local x="$1"
  local d="$2"
  while [ $d -gt 0 ]
  do
    x=${!x}
    d=$((d-1))
  done
  echo $x
}
a=b
b=c
c=d
x=a
deep $x 0
deep $x 1
deep $x 2
deep $x 3

$ bash deep.sh
a
b
c
d
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP