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}这样的形式来表示变量中的变量。
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}这样的形式来表示变量中的变量。
0
使用铭哥的方法可以,同样的,还有一个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]#
[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 于 2015-12-11 17:15 编辑
shift 的实现。。
测试结果:
shift 的实现。。
- #!/bin/bash
- if [ $# == 0 ];then
- ls -ld `pwd`
- else
- until [ -z "$1" ]
- do
- ls -l "$1" | grep '^d'
- shift
- done
- fi
测试结果:
- [root@master shell]# sh -x dir.sh /root /tmp
- + '[' 2 == 0 ']'
- + '[' -z /root ']'
- + ls -l /root
- + grep '^d'
- drwxr-xr-x 3 root root 4096 11月 3 21:14 jpg
- drwxr-xr-x 4 root root 4096 11月 18 19:33 patch
- drwxr-xr-x 2 root root 4096 11月 24 04:04 shell
- drwxr-xr-x 2 root root 4096 11月 20 11:12 test1
- drwxr-xr-x 2 root root 4096 11月 20 11:13 test2
- + shift
- + '[' -z /tmp ']'
- + grep '^d'
- + ls -l /tmp
- drwx------ 2 root root 4096 11月 19 04:06 ssh-eeIRD33261
- + shift
- + '[' -z '' ']'
编辑回复