免费注册 查看新帖 |

Chinaunix

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

问一个关于bash shell中的伪数组问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-15 10:35 |只看该作者 |倒序浏览
我看到一个脚本中有这么一段:
while read DATA
do
        eval $DATA
        eval "declare DATEBOOK_${mm}_${dd}_$yy =$msg"
done < eval.dat
知道变量数组DATEBOOK_${mm}_${dd}_$yy已经被赋值了$msg,可是如何将变量DATEBOOK_${mm}_${dd}_$yy的值输出呢?
   百思不得其解,求教各位!
注:eval.dat
mm=01 dd=12 yy=2004 msg=' Appt with Kell '
mm=03 dd=09 yy=2004 msg=' Attend a meeting'
mm=04 dd=11 yy=2004 msg=' An nice day! '

论坛徽章:
0
2 [报告]
发表于 2004-12-15 17:41 |只看该作者

问一个关于bash shell中的伪数组问题

呵呵,帮帮忙了各位,我很想知道答案哪^_^

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-12-15 19:41 |只看该作者

问一个关于bash shell中的伪数组问题

什么是伪数组?

论坛徽章:
0
4 [报告]
发表于 2004-12-16 07:43 |只看该作者

问一个关于bash shell中的伪数组问题

应该就是将已知变量看做是数组下标,和数组相类似的一种方式吧。比如,这里的DATEBOOK_${mm}_${dd}_$yy相当于定义了一个三维数组,因为DATEBOOK后面有三个变量,相当于三个数组下标,即相当于DATEBOOK[01][12][2004]…………
    这里通过循环,产生了三个伪数组变量值:
DATEBOOK_01_12_2004=Appt with Kell
DATEBOOK_03_09_2004=Attend a meeting
DATEBOOK_04_11_2004=An nice day!
    可是我不知道如何输出这三个变量的值阿^_^

论坛徽章:
0
5 [报告]
发表于 2004-12-16 08:14 |只看该作者

问一个关于bash shell中的伪数组问题

我试着改了一下,但只能输出一维数组的情况:
DATEBOOK[$mm]=$msg
echo  ${DATEBOOK[$mm]}
输出:
[root@localhost root]# ./eval.sh 03 16 2004
Datebook Entry for 03_16_2004:
Attend a meeting
  不知道为什么多几个方括号就会出现赋值空的问题?如何解决?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-12-16 12:14 |只看该作者

问一个关于bash shell中的伪数组问题

shell只支持一维数组!你搜搜论坛,我记得有人写过模拟多维数组的例子!

论坛徽章:
0
7 [报告]
发表于 2004-12-16 15:07 |只看该作者

问一个关于bash shell中的伪数组问题

呵呵,谢谢指点了,我找到一个似乎非常有用的帖,贴出来给大家分享一下吧: )
http://www.douzhe.com/docs/bbsjh/11/896.html
## eval用法三例 ##
## shell:/bin/sh ##
## yhc 2002.09.26 18:00 ##

#例一:
#寻找合符条件的变量名,然后将该变量的值赋予另一变量
v1=aaa
v2=bbb
c=1
if [ $c -eq 1 ]
then
vname=v$c   #找到符合条件的变量名为v1
eval vvv="$"$vname ; echo vvv: $vvv    #将变量v1的值赋予vvv,即,使vvv=aaa
eval vvv='$'$vname ; echo vvv: $vvv    #将变量v1的值赋予vvv,即,使vvv=aaa
#eval vvv=$$vname   ; echo vvv: $vvv    #错误用法
fi


#例二:#以变量v1的值aaa作为变量名,将变量vaaa的值赋予这一新定义的变量aaa
v1=aaa ; vaaa="This is aaa"
#eval $v1=$vaaa    ; echo aaa: $aaa    #错误用法
#eval $v1="$vaaa"  ; echo aaa: $aaa    #错误用法
eval $v1='$vaaa'   ; echo aaa: $aaa


#例三:
#以变量v1的值aaa作为变量名,并将变量名字串作为值赋予自身
v1=aaa ; vaaa="This is aaa"
eval $v1=$v1   ; echo aaa: $aaa    #与例二的错误用法不同,这一用法是正确的
eval $v1="$v1" ; echo aaa: $aaa    #与例二的错误用法不同,这一用法是正确的
eval $v1='$v1' ; echo aaa: $aaa

论坛徽章:
0
8 [报告]
发表于 2004-12-16 22:27 |只看该作者

问一个关于bash shell中的伪数组问题

^_^,借助上面的提示,终于解决了这个问题,好开心哦: )
真是太感谢这位作者:山地獾
解决的脚本如下,其实是很简单的:
#!/bin/bash
# scriptname: eval.sh

if [ $# -ne 3 -a $# -ne 0 ]
then echo Usage: eval.sh {mm} {dd} {yyy};exit 0
fi
while read DATA
do
        eval $DATA
        eval "DATEBOOK_${mm}_${dd}_$yy='$msg'"
done < eval.dat

if [ $# -eq 3 ]
then        curdate="$1_$2_$3"
else        curdate="`date '+%m_%d_%Y'`"
fi

echo Datebook Entry for $curdate:
eval echo  "$"DATEBOOK_$curdate
输出如下所示:
[root@localhost ScriptFiles]# ./eval.sh 03 09 2004
Datebook Entry for 03_09_2004:
Attend a meeting
[root@localhost ScriptFiles]# ./eval.sh 12 12 2004
Datebook Entry for 12_12_2004:
Appt with Kell
这个脚本是用来查询资料用的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP