登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 851|回复: 0

shell脚本-如何将字符串分割成数组

[复制链接]

 成长值: 35935

8169

主题

7094

帖子

6831

现金

黑狼创办人

Rank: 12Rank: 12Rank: 12

积分
6831
发表于 2017-11-4 12:41:24 | 显示全部楼层 |阅读模式 来自 广东东莞
前言


shell编程过程中,很多时候需要操作数组,而命令返回的一般都是字符串,如何将字符串根据指定的符号进行分割呢?
dlHpnNH1r7DH1dBj.jpg
这里就需要有到一个变量IFS( Internal Field Separator,内部的域分隔符),IFS的默认值为:空白(包括:空格,tab, 和新行)
如果直接用 echo $IFS看不出来,可以将结果用ASSII码用十六进制打印出来:
echo -n "$IFS" | xxd -g 1
00000000: 20 09 0a ..
十六进制的20是32
十六进制的09是9
十六进制的0a是10
根据下面的图就可以看出来是哪个符号: SGwG31GgWmOSGcSm.jpg
ASCII 10进制
分割字符串


如果要以默认的这三种符号进行分割,就不需要修改变量。
例子:
#!/bin/bash
a="one two three four"

array=($a)
for s in ${array[@]}
do
echo $s
done
执行结果:
muJAh7Hu4VZuH6rC.jpg
如果是其他分割符,就需要修改这个变量。(修改的时候记得先保存一下变量,分割完就马上赋值回去,防止下面输出的格式变了)
例子:
#!/bin/bash
a="one,two,three,four"
OLD_IFS="$IFS"
IFS=","
array=($a)
IFS="$OLD_IFS"
for s in ${array[@]}
do
echo $s
done
执行结果:
V7k111l4Fl2BKkS1.jpg
array=($a)用于将字符串$a分割到数组$array ${array[0]} ${array[1]} ... 分别存储分割后的数组第1 2 ... 项 ,${arr[@]}存储整个数组。

IFS对空格的空白的处理和其他字符不一样,左右两边的纯空白会被忽略,多个连续的空白被当成一个IFS处理。
多个符号进行分割
#!/bin/bash
a="1,,,2::3"
OLD_IFS="$IFS"
IFS=",:"
array=($a)
IFS=OLD_IFS
for s in ${array[@]}
do
echo $s
done
执行结果:
U2iinJ2zDCiejNIj.jpg
总结



写shell脚本不好debug,很容易出错,可以使用bash -x scripts.sh 执行,来查看具体的执行步骤。shell脚本虽然方便,但是执行效率嘛。。。。。
DdeSKXFAf575v57a.jpg




上一篇:ELK日志分析系统
下一篇:linux 入门shell脚本编程练习题
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-15 13:36 , Processed in 0.055929 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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