|
|
第 1 帖 | |
|
|
标题: 关于array中的变量替换? [分享] 有这样一个较复杂的命令, 这里列出其中11个args的array.
代码:
代码:
代码:
|
|
|
|
|
|
|
|
第 2 帖 | |
|
|
your code is very Excellent
|
|
|
|
|
|
|
|
第 3 帖 | |
|
|
谢谢javalee兄加精. 我在ksh中试for loop的C形式写法,不认. ksh中是不是不能用C型写法呢. 个人感觉shell的C语法形式较简练.
__________________
15" C2D MBP. 有简单的,不用复杂的!看到复杂的,尽量简单化! Unix/Linux Philosophy: Be small! Be concentrated! One program does one thing and do it perfectly! ∞ years - 宇宙中最后的物质 Proton heat death. 之后,宇宙将以纯能量的形式永远存在。。。一切皆空 |
|
|
|
|
|
|
|
第 4 帖 | |
|
|
嗯,不错。
这其实就是"命令行处理"的应用例子。
__________________
IBOX, a LiveCD distribution based on Gentoo, is fit for newbie. IBOX brings to you: - knoppix-style harddisk installation tool, by which you can install Gentoo in 20 minutes. - hardware auto-configuration. You can run into X desktop directly. - all-round software set, including OpenOffice, azureus. - LiveCD-create-tools. Step-by-step, custom a LiveCD yourself with ease. Any questions and feedbacks is welcome to home_king at 163 dot com |
|
|
|
|
|
|
|
第 5 帖 | ||
|
|
引用:
|
||
|
|
|
||
|
|
第 6 帖 | |
|
|
这个方法在Unix中不行! 只能用于Linux bash! (已在AIX上试过)
1. seq cmd在Unix中没有. 2. 替换的语法不一样. 3. Unix上不支持C型语法,所以j=$((++j))不work. |
|
|
|
|
|
|
|
第 7 帖 | |
|
|
给出Unix上的写法,略有不同:
代码:
|
|
|
|
|
|
|
|
第 8 帖 | |
|
|
哦, 对了. ksh上定义array的方法也不一样. 楼顶帖中的方法是bash的. ksh中是
代码:
|
|
|
|
|
|
|
|
第 9 帖 | ||
|
|
引用:
![]() 另外,建议兄弟贴的时候注明一下系统环境和shell种类, OK ![]() |
||
|
|
|
||
|
|
第 10 帖 | |
|
|
yongjian兄,你的方法有点冗余,其实这个数组引用一点都不神秘,掌握了"命令行处理"后,使用eval来构造智能命令行也不难。知其然,更要知其所以然,这才是学习的目的。
ps:老是实践,也说明兄弟对于命令行处理的概念不清晰,把握地不好。 修正如下: 代码:
http://www.linuxsir.org/bbs/showthre...threadid=99465 我分析一下: 1.单引号跳过了前10步处理,于是第一个"$"不变 2.正常地进行$var变量替换,其余普通字符保留,于是,第一次命令行处理结果为eval echo ${array1[2]}。 3.eval再次执行一次处理过的命令行,命令处理为echo ${array1[2]} 4.执行命令,结果如上所示例,达到动态引用数组的效果 很佩服兄弟的实践精神,我希望兄弟能再做好一点,在实践的同时,不要忘了上升为理论,这样才达到学习的目的,要学的知识有很多,关键是掌握规律,掌握了规律,学一当十也 ![]() 此帖于 04-05-05 22:30 被 home_king 编辑. |
|
|
|
|
|
|
|
第 11 帖 | |
|
|
感谢了! 其实我是看到很多兄弟学习到了方法后应用到了不同的平台上但是发现语法不一样,或是命令不支持,才将不同的系统中的差异写出来的.主要是希望看到这个帖的兄弟不要什么都照搬照套.Linux和Unix在CLI上还是有很多差异的. 以后我都会将代码能够应用的平台和shell注明的.
To 教主: 教主说的是,我以前确实是对变量替换的概念理解的不够深,特别是对array的变量替换. 不过现在我知道了. 其实很简单, 变量替换符${}内是不能再存在变量的. 不论是'$'{array$num[$index]}的写法,还是'${array'$num[$index]'}'的写法, 都是为了esc前10步,将结果交给eval . 当然,教主的写法简单一些. |
|
|
|
|
|
|
|
第 12 帖 | |
|
|
yongjian兄努力!:2cool
|
|
|
|
|
|
|
|
第 13 帖 | |
|
|
在Linux下bash下还有一种对于简单变量的替换方法, a=b;b=c;echo ${!a},但是只是对于Linux的bash, ksh都不行. array变量好象也是无法应用的.
|
|
|
|
|
|
|
|
第 14 帖 | |
|
|
标题: 其实,这是间接引用在数组上的实现问题 #!/usr/bin/bash
#其实,这是间接引用在数组上的实现问 #我是最近才学习使用SHELL编程。 #在数组方面的间接引用,我一般是这样处理的: r1="rt" r2="tt" ttrt=( "dfgsd" "fdsfds" "sfsf" "eeefds" ) eval tt$r2='${ttrt[@]}' # tttt=( "dfgsd" "fdsfds" "sfsf" "eeefds" ) #生成tt$rt所指的tttt数组 echo "..1.. "${tttt[@]} i=2 eval tt$r1[$i]="op" # ttrt[2]='"op" #间接引用tt$rt[$i]所指的数组成员 echo "..2..ttrt[@]="${ttrt[@]} p="cc" eval $p'['$i']'=${ttrt[2]} #间接生成数组 cc[2]=op echo "..3..cc[2]="${cc[2]} # op # 输出验证 cc[2]=op echo "..4..ttrt[2]="${ttrt[2]} # 执行 ls -l 命令 #输出验证 ttrt[2]=op echo "..." ttrt[2]='ls -l' #ttrt[2] 赋值为命令ls -l eval $p'['$i']'='${ttrt[2]}' # 注意,用单引号 ' '为好 eval '${'$p'['$i']}' # 执行ls -l 命令 # 执行 ls -l 命令 eval $p'['$i']'=oooppp #' eval c='${'$p'['$i']}' # 以上为= 两边的间接引用方法 echo $c #输出oooppp # 这是赋值变量的间接引用注意是在= 的左边,在=右边的引用常见到 ##这种方法是函数的传递参数是很有用的,我们传一个数组的名给一个变量的名称,就可以#处理液体个数组 exit #一下是输出 [wu@myhost ~]$ bash tt ..1.. dfgsd fdsfds sfsf eeefds ..2..ttrt[@]=dfgsd fdsfds op eeefds ..3..cc[2]=op ..4..ttrt[2]=op ... 总计 21 drwx------ 3 wu dgc 320 11-27 11:34 Desktop drwxr-xr-x 3 wu dgc 10040 2007-03-30 abs-3.9.1_cn drwxr-xr-x 3 root root 72 11-26 16:38 core drwxr-xr-x 6 wu dgc 3200 11-28 14:41 down -rw-r--r-- 1 wu dgc 142 11-25 13:45 pp -rw-r--r-- 1 wu dgc 1615 11-29 10:46 tt oooppp 注:清楚的表述见 http://www.linuxsir.org/bbs/showthre...428&highlight= 此帖于 08-01-11 11:42 被 zswlb9999 编辑. |
|
|
|
|
|
|
|
第 15 帖 | ||
|
|
引用:
|
||
|
|
|
||