使用内部字段分隔符读取文件

特殊环境变量IFS,叫做内部字段分隔符(internal field separator)
默认情况下,bash shell默认会以下列字符作为内部字段分隔符:

  • 空格
  • 制表符
  • 换行符

读取一个文件

可以临时更改IFS环境变量的值来限制被bash shell当作字段分隔符的字符。
如拾起只能识别换行符,IFS=$’\n’.
下面先新建一个文件,如下所示:
$ cat states

Alabama
Alaska
Arizona
Delaware

再新建一个脚本,命名为test
$cat test

#!/bin/bash
# reading values from a file
file="states"

IFS=$'\n'
for state in $(cat $file)
do
  echo "Visit beautiful $state"
done

执行test脚本,可以获得如下输出

Visit beautiful Alabama
Visit beautiful Alaska
Visit beautiful Arizona
Visit beautiful Delaware

注:如果要指定多个IFS字符,只要将它们在赋值行串起来就行
如IFS=$’\n’:;"会将换行符,冒号,分号,双引号作为字段分隔符。

循环处理文件

通过修改IFS,不停变换字段分隔符,可以用在循环处理文件中
先新建一个文件:
$cat cities

Shandong:jinan
heilongjiang:haerbin
fujian:fuzhou
yunan:kunming

再新建一个脚本,命名为test2
$cat test2

#!/bin/bash
#city in province
IFS=$'\n'
for city in $(cat cities)
do 
  echo City is $city
  IFS=:
  for value in $city
  do 
     echo " $value"
  done
done

执行test2脚本,可以获得如下输出:

City is Shandong:jinan
 Shandong
 jinan
City is heilongjiang haerbin
 heilongjiang
 haerbin
City is fujian fuzhou
 fujian
 fuzhou
City is yunan kunming
 yunan
 kunming

从上面的例子中,可以看到一开始将IFS设置为换行符,用于读取每行数据
之后通过修改IFS为冒号,用于分隔每行数据中每个字段,最后通过嵌套循环展示。

发布了75 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhengdong12345/article/details/101025541