免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lmtwl

[其他] shell 按行读取并保存成数组 [复制链接]

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2014-06-25 13:07 |显示全部楼层
回复 9# lmtwl

try this way ...
Note: just change the "echo ..." to your command ...

$ eval "ARRAY=("$(echo -e "a a1 a2\nb b1 a3" | awk -vq='"' '{print q$0q}')")"

$ echo ${ARRAY[0]}
a a1 a2

$ echo ${ARRAY[1]}
b b1 a3


   

论坛徽章:
0
发表于 2014-06-25 14:12 |显示全部楼层
回复 11# jason680
时间上在shell 用for 读出数组 ARRAY 还是不行,
存储的内容还是把一行的内容以空格分割开,分别进行存储


   

论坛徽章:
0
发表于 2014-06-25 14:13 |显示全部楼层
本帖最后由 lmtwl 于 2014-06-25 14:16 编辑

回复 10# 关阴月飞
IFS确实影响了整个shell,不知道有没有什么更好的办法进行存储。
这个能处理的话,我想函数返回数组,使用起来更加方便

使用IFS 我在实际测试中发现,数组里面实际上存储的还是分割开了,不能达到预期 效果

   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2014-06-25 14:17 |显示全部楼层
本帖最后由 关阴月飞 于 2014-06-25 14:17 编辑

回复 13# lmtwl

你说的存储是这个意思吗:
IFS_OID=$IFS
IFS=xxoo
XXOO
OOXX
XXOO
IFS=$IFS_OLD

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2014-06-25 14:18 |显示全部楼层
本帖最后由 ly5066113 于 2014-06-25 14:19 编辑

回复 13# lmtwl


加个双引号就可以了
  1. for i in "${ARRAY[*]}"
  2. do
  3. echo ${i}
  4. done
复制代码

论坛徽章:
0
发表于 2014-06-25 14:25 |显示全部楼层
回复 15# ly5066113
加入双引号 把所有数据存储在一行了。 实际上arr存储的还是被分割过以后

论坛徽章:
0
发表于 2014-06-25 14:28 |显示全部楼层
本帖最后由 lmtwl 于 2014-06-25 14:29 编辑

回复 14# 关阴月飞



#!/bin/bash
IFS_OLD=$IFS
IFS='
'
arr=(`route -n |grep -v 0.0.0.0 |awk '{print $1,$3}'`)
IFS=$IFS_OLD
for i in ${arr
  • }
    do
    echo "*"
    echo ${i}
    done
    显示结果还是不对,时间上ARR的存储内容还是分割过后
  • 论坛徽章:
    145
    技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
    发表于 2014-06-25 15:51 |显示全部楼层
    回复 12# lmtwl

    $ eval "arr=("$(route -n | grep -v "^0.0.0.0" | awk -vq='"' 'NR>2{print q$1,$3q}')")"

    $ for n in "${arr[@]}"; do echo $n; done
    10.0.2.0 255.255.255.0
    169.254.0.0 255.255.0.0

       

    论坛徽章:
    0
    发表于 2014-06-26 09:47 |显示全部楼层
    回复 18# jason680


        感谢,不失为一个好办法

    论坛徽章:
    1
    操作系统版块每日发帖之星
日期:2015-11-29 06:20:00
    发表于 2015-11-10 16:44 |显示全部楼层
    学习了,感谢!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP