[原创]Bash动态变量的使用
个人尝试得到,备忘,如有转载,请注明作者和出处。
——by realasking
很久没有写脚本了,今天处理数据,又写脚本,结果写着写着突然发现直接用了很多如x,y,z之类的变量名,结果就不如定义数组那么方便使用了,如果要改,改动的地方不少,有些费事儿,想了想,还是使用动态变量的办法来处理。
使用动态变量,其实是用read来赋值,用eval来取值,但是很久没看shell的东西了,有些手生,自己摸索了半天,终于还是弄出来了,故作个笔记,防止以后再遗忘。
假定我定义了如下的变量:
xl,yl,zl, xh,yh,zh
要对x,y,z作循环,对这些从文件赋值,就是:
j=0
for i in x y z
do
j=$((j+1))
sed –n ‘’”$j”’’p filename1>filename2
read $(echo $i)l $(echo $i)h<filename2
done
如果对这些从字符串赋值,就是:
j=0
for i in x y z
do
j=$((j+1))
read $(echo $i)l $(echo $i)h<<<`sed –n ‘’”$j”’’p filename1`
done
在循环中取出两组已赋值的变量,并求和:
t1=`eval echo '$'"$(echo $i)l"`
t2=`eval echo '$'"$(echo $i)h"`
read $(echo $i)h<<<`echo "$t1 + $t2"|bc`
t2=`eval echo '$'"$(echo $i)h"`
sed输出由动态变量[x]linen保存的数字作行号的行:
sed -n ''"$(($(echo $i)linen))"''p filename
sed替换动态变量名所在行内容为动态变量内容和动态变量名:
A="$t1 $(echo $i)l"
sed -i '/'"$(echo $i)l"'/s/.*/'"$A"'/g' filename