shell - IFS分隔符

本文详细介绍了Shell环境中IFS(Internal Field Separator)变量的作用与应用技巧,包括如何使用IFS定制分隔符处理字符串,实现IP地址的倒序排列,以及使用换行符作为分隔符进行数据解析。

IFS是internal field separator的缩写,shell的特殊环境变量。ksh根据IFS存储的值,可以是空格、tab、换行符或者其他自定义符号,来解析输入和输出的变量值。

  • 用IFS定制分隔符的方式范例

    1

    2

    3

    IFS='|'

    text='a a a a|b b b b|c c c c'

    for i in $text;do echo "i=$i";done

  • IP地址倒序

如果有一IP地址220.112.253.111, 欲将这个IP地址颠倒顺序,你可以定义IFS为".",然后直接echo这个地址即可得到此IP的4个数值,然后重新把IFS设为空格,重新组合四个IP>地址的数值即可。

1

2

3

4

5

6

7

8

# The following code segment will only work in ksh,

# and it will fail in bash

IP=220.112.253.111

IFS="."

TMPIP=$(echo $IP)

IFS=" " # space

echo $TMPIP | read ip1 ip2 ip3 ip4

INVERT_IP=$ip4.$ip3.$ip2.$ip1

  • 使用换行符做分隔符

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#!/bin/sh

conf="ABC

A B C

1|2|3

1 2 3"

echo "$conf"

 

echo --------------

echo IFS:

echo -n "$IFS"|xxd

echo --------------

for c in $conf;do

    echo "line='$c'";

done

 

echo --------------

#IFS=$'\n'  表示用 换行符 做分隔

#IFS="\n" 与 IFS='\n'  都是用 n 字符作为分隔

IFS=$'\n'

echo IFS:

echo -n "$IFS"|xxd

echo --------------

for c in $conf;do

    echo "line='$c'";

done

ABC
A B C
1|2|3
1 2 3
--------------
IFS:
00000000: 2d6e 2020 090a 0a                        -n  ...
--------------
line='ABC'
line='A'
line='B'
line='C'
line='1|2|3'
line='1'
line='2'
line='3'
--------------
IFS:
00000000: 2d6e 200a 0a                             -n ..
--------------
line='ABC'
line='A B C'
line='1|2|3'
line='1 2 3'

转载于:https://my.oschina.net/sfshine/blog/2254604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值