如何使用间接变量
时间:2006-01-17 来源:WillsonZhang
在这里讨论的shell是bash。这里的间接变量是指类似这样的一些变量:
变量i取值为1,2,3等,而$1, $2, $3等分别也是变量,代表shell程序的参数1,参数2,参数3等。如果要通过变量i的不同取值来引用shell程序的不同参数,那么i就是这里所说的间接变量。
在shell脚本里怎么使用这类变量呢?我所发现的方法是使用bash shell的内嵌函数eval。还是举例说明比较清楚:
例1: 假如我的shell脚本的参数数量不固定,我希望依次取得每个参数的值,每次取一个。传统的做法是
在shell脚本里怎么使用这类变量呢?我所发现的方法是使用bash shell的内嵌函数eval。还是举例说明比较清楚:
例1: 假如我的shell脚本的参数数量不固定,我希望依次取得每个参数的值,每次取一个。传统的做法是
while [ $# -gt 0 ]
do
echo "$1"
shift
done
do
echo "$1"
shift
done
上面的方法有个缺陷,每次'shift'后,参数数量就会递减,除非你事先保存先前的参数,否则就没法再通过$1, $2等来得到先前的参数。我们可以通过这样的方法来避免。
i=1;
while [ $i -le $# ]
do
CMD="echo \"\$$i\""
eval $CMD
i=`expr \( $i + 1 \)`
done
while [ $i -le $# ]
do
CMD="echo \"\$$i\""
eval $CMD
i=`expr \( $i + 1 \)`
done
我们用间接参数i就可以来遍历所有的参数,而且所有参数的原位置不会改变。任何时候,你都可以通过$1, $2等来得到第1、第2个参数。
例2:假如我要用awk来取某个域的值,而取第几个域是由shell变量i决定的。那就可以用这样的方法:
例2:假如我要用awk来取某个域的值,而取第几个域是由shell变量i决定的。那就可以用这样的方法:
AWK_CMD="awk -F. '{print \$$i}'"
echo $STRING |eval $AWK_CMD
echo $STRING |eval $AWK_CMD
相关阅读 更多 +