LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3473|回复: 9

如何把字符串变成数组变量。

[复制链接]
发表于 2008-9-27 11:04:38 | 显示全部楼层 |阅读模式
如";;123;1231"
转成的数组a是
a[0]=""
a[1]=""
a[2]="123"
a[3]="1231"

谢谢。
发表于 2008-9-27 14:57:47 | 显示全部楼层
[xiao@localhost soft]$ ipython -p sh
IPython 0.9   [on Py 2.5.2]
[~/soft]|1> s = ";;123;1231".split(';')
[~/soft]|2> s
        <2> ['', '', '123', '1231']
这样可以吗,不过是ipython的.

这是我的处女帖,请支持下。
回复 支持 反对

使用道具 举报

发表于 2008-9-27 16:22:45 | 显示全部楼层
要是用 bash 的话, 也许可以试试下面的代码

  1. #!/bin/sh

  2. src=";;123;321"

  3. # 利用 bash 的 Parameter Expansion 功能把 ';' 全替换成 ' ', 再扩展成数组
  4. dst=( ${src//;/ } )

  5. # 这种方法是等效的, 不过比较好理解
  6. dst=( $(echo $src | sed 's/;/ /g') )

  7. echo $dst
  8. echo ${dst[0]}
  9. echo ${dst[1]}
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-27 23:02:20 | 显示全部楼层
Post by remote fish;1887737
要是用 bash 的话, 也许可以试试下面的代码
  1. #!/bin/sh
  2. src=";;123;321"
  3. # 利用 bash 的 Parameter Expansion 功能把 ';' 全替换成 ' ', 再扩展成数组
  4. dst=( ${src//;/ } )
  5. # 这种方法是等效的, 不过比较好理解
  6. dst=( $(echo $src | sed 's/;/ /g') )
  7. echo $dst
  8. echo ${dst[0]}
  9. echo ${dst[1]}
复制代码

";;123;321"分隔形成的数组的第一个和第二个元素应该是为空的啊。
而你的${dst[0]}和${dst[1]}却等于123和321哦。

再比如说,假如字符串是
;;122 2132;1232
形成的数组应该是"","", "122 2132","1232",数组长度应为4.
但代码( $(echo $src | sed 's/;/ /g') )形成的数组长度却为3,元素分别是"122", "2132", "1232".
回复 支持 反对

使用道具 举报

发表于 2008-9-29 11:14:25 | 显示全部楼层
看来我的理解有误,现在归纳一下 bbskill 兄的限制:
* 分隔符是 ';', 任何一个 ';' 都有效
* 字段中可能出现除 ';' 外的所有字符
是这个意思么?

如果只是分割倒是好办,不过如何方便地形成数组是个问题。我在上面回复时才头一次意识到 bash 支持数组,说来惭愧...... bbskill 兄自己有什么想法呢?不妨说说看,也许可以给大家一些启发

不管怎样,十一期间估计没机会碰 linux 了,等十一结束后再考虑吧。
回复 支持 反对

使用道具 举报

发表于 2008-9-29 17:18:00 | 显示全部楼层
  1. oldifs=$IFS;IFS=';';a=($(echo "$src"));IFS=$oldifs
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-30 02:29:38 | 显示全部楼层
yongjian兄,你的代码跟remote fish的效果和原理差不多。但生成的数组的元素个数变成了2,第一个和第二个元素应该是为空的。
bbskill@BBSKILLS ~
$ src=";;123;1231"

bbskill@BBSKILLS ~
$ oldifs=$IFS;IFS=';';a=($(echo "$src"));IFS=$oldifs

bbskill@BBSKILLS ~
$ echo ${a
  • }
    123 1231
  • 回复 支持 反对

    使用道具 举报

    发表于 2008-9-30 11:19:34 | 显示全部楼层
    1. src=';;123;1231'
    2. a=($(echo "$src" | sed 's/;/" "/g;s/.*/"&"/'))
    3. echo ${#a[*]}
    4. echo ${a[0]}
    5. echo ${a[1]}
    6. echo ${a[2]}
    7. echo ${a[3]}
    复制代码
    回复 支持 反对

    使用道具 举报

    发表于 2008-9-30 11:21:51 | 显示全部楼层
    Post by bbskill;1888727
    yongjian兄,你的代码跟remote fish的效果和原理差不多。但生成的数组的元素个数变成了2,第一个和第二个元素应该是为空的。
    bbskill@BBSKILLS ~
    $ src=";;123;1231"

    bbskill@BBSKILLS ~
    $ oldifs=$IFS;IFS=';';a=($(echo "$src"));IFS=$oldifs

    bbskill@BBSKILLS ~
    $ echo ${a
  • }
    123 1231


  • 这个也是正确的


    1. echo ${#a[*]}
    2. echo ${a[0]}
    3. echo ${a[1]}
    4. echo ${a[2]}
    5. echo ${a[3]}
    复制代码

    就可以判断了
    回复 支持 反对

    使用道具 举报

    发表于 2008-9-30 22:34:23 | 显示全部楼层
    IFS最简单
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    快速回复 返回顶部 返回列表