shell中变量名为一个变量

回复 收藏
shell中调用动态变量
shell变量引用一个变量

举例:
for i in 1 2 3
do
    echo $"$i"
done

其中$i的值已经是一个变量值了,这时候变量名为一个变量的值。这就复杂了很多。 当然我上面这种用法肯定不对,得不到答案。那么如何做?

for i in 1 2 3
do
    a=$i
    echo ${!a}
done

使用${!a}这样的形式来表示变量中的变量。
2015-07-17 16:25 举报
已邀请:
0

李宁

赞同来自:

不行啊,阿铭老师。输出不了结果
0

zhangsan

赞同来自:

使用铭哥的方法可以,同样的,还有一个eval 同样也可以实现相同功能
[root@bogon zhangsan]# cat testeval
#/bin/sh
for i in 1 2 3
do
#    a=$i
#    echo ${!a}
        eval echo \${$i}
done
[root@bogon zhangsan]# ./testeval a b c
a
b
c
[root@bogon zhangsan]#

0

xueyongbo

赞同来自:

本帖最后由 xueyongbo 于 2015-12-11 17:15 编辑

shift 的实现。。

  1. #!/bin/bash
  2. if [ $# == 0 ];then
  3.         ls -ld `pwd`
  4. else
  5.        until [ -z "$1" ]
  6.        do
  7.                ls -l "$1" | grep '^d'
  8.               shift
  9.        done
  10. fi

测试结果:
  1. [root@master shell]# sh -x dir.sh /root /tmp
  2. + '[' 2 == 0 ']'
  3. + '[' -z /root ']'
  4. + ls -l /root
  5. + grep '^d'
  6. drwxr-xr-x  3 root root    4096 11月  3 21:14 jpg
  7. drwxr-xr-x  4 root root    4096 11月 18 19:33 patch
  8. drwxr-xr-x  2 root root    4096 11月 24 04:04 shell
  9. drwxr-xr-x  2 root root    4096 11月 20 11:12 test1
  10. drwxr-xr-x  2 root root    4096 11月 20 11:13 test2
  11. + shift
  12. + '[' -z /tmp ']'
  13. + grep '^d'
  14. + ls -l /tmp
  15. drwx------ 2 root root   4096 11月 19 04:06 ssh-eeIRD33261
  16. + shift
  17. + '[' -z '' ']'




回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: