免费注册 查看新帖 |

Chinaunix

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

[其他] 請問變量問題 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-15 10:59 |只看该作者 |倒序浏览
可以請問如果我有 10個變量有設過了,但想unset,可以使用迴圈表示嗎?

因為一般使用是

if( $?a1 ) then
   unset a1
endif

if( $?a2 ) then
   unset a2
endif

但有時變量過多會造成程式過長

因為使用過\ ,但仍然無法使用,所以想請教一下了

麻煩了

謝謝!!

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2014-02-15 11:54 |只看该作者
迴圈 是 括号 () 的意思吗?

你想要的是,如果有一系列变量, a1, a2, a3,..., 想一次性 unset ,是这个要求吗?

变量的取名有规律吗?

论坛徽章:
0
3 [报告]
发表于 2014-02-15 11:55 |只看该作者
回复 1# undeaduck ?

Hi, do u mean this ?
hope can help u.
  1. cat test.sh
  2. #!/bin/csh
  3. set a1=a
  4. set a2=b
  5. set i=1

  6. while ( $i <= 2 )
  7.         eval echo \\\$\\\?a$i=\$\?a$i
  8.         eval if \( \$\?a$i \) then
  9.         eval echo \$a$i
  10.         eval unset a$i
  11.         endif
  12.         eval echo \\\$\\\?a$i=\$\?a$i
  13.         set i=`expr $i + 1`
  14. end
复制代码
  1. ./test.sh
  2. $?a1=1
  3. a
  4. $?a1=0
  5. $?a2=1
  6. b
  7. $?a2=0
复制代码

论坛徽章:
0
4 [报告]
发表于 2014-02-15 13:14 |只看该作者
回复 2# rdcwayx


   是的

迴圈是( )

像foreach a ( a1 a2 )

變量是規律的

论坛徽章:
0
5 [报告]
发表于 2014-02-15 13:14 |只看该作者
回复 3# runintostar


    謝謝

我再試看看~~

论坛徽章:
0
6 [报告]
发表于 2014-02-15 13:46 |只看该作者
回复 5# undeaduck
Sorry, i considered your variables are regular as "a1 a2 a3", so i used an integer i to express "a1 a2 a3" as "a$i".
Maybe your variables are not regular.
If so, replace "while ( $i<=2 )" with "foreach a (a1 a2)" and replace "a$i" with "$a" in the codes that i submit earlier.
Just like this:
  1. #!/bin/csh
  2. set a1=a
  3. set a2=b

  4. foreach a (a1 a2)
  5.         eval echo \\\$\\\?$a=\$\?$a     #for debug
  6.         eval if \( \$\?$a \) then
  7.         eval echo \$a
  8.         eval unset $a
  9.         endif
  10.         eval echo \\\$\\\?$a=\$\?$a     #for debug
  11. end
复制代码

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
7 [报告]
发表于 2014-02-16 11:40 |只看该作者
  1. 因為使用過\ ,但仍然無法使用
  2. 这个是换行时候用到的 \ 吗?

  3. [redhat@localhost 0213]$ a=1;b=2;c=3
  4. [redhat@localhost 0213]$ var=(a b c)
  5. [redhat@localhost 0213]$ for i in ${var[@]}; do echo "before: "$i"="${!i};unset $i;echo "after: "$i"="${!i}; done
  6. before: a=1
  7. after: a=
  8. before: b=2
  9. after: b=
  10. before: c=3
  11. after: c=
  12. [redhat@localhost 0213]$
复制代码

论坛徽章:
0
8 [报告]
发表于 2014-02-16 17:02 |只看该作者
回复 6# runintostar


    謝謝

我再試看看喔~

感恩~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP