栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

shell命令之 IFS 分隔符;cat逐行读取文件

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shell命令之 IFS 分隔符;cat逐行读取文件

shell命令之 IFS 分隔符;cat逐行读取文件
    • 情景
    • 解决方案
      • 方案1 while read的应用
      • 方案2 设置分割符
    • 解释

情景

我们经常会使用 cat 命令读取文件,但当行内有空白符(空格、tab、换行)时就不会按行输出了
文件内容

a b
1 2
3 4

脚本内容

for i in `cat file`
do
   echo $i
done

结果内容

a
b
1
2
3
4
解决方案 方案1 while read的应用

格式1

while read line
do
   echo $line
done < file

格式2

cat file | while read line
do
   echo $line
done

read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理

方案2 设置分割符
IFS=$'n' # 定义分割符
# for i in $(cat file)    # better
# for i in $( 

IFS="n" # 将字符n作为IFS的换行符。
IFS=$"n" # 这里n确实通过$转化为了换行符,但仅当被解释时(或被执行时)才被转化为换行符;第一个和第二个是等价的

IFS=$'n' # 这才是真正的换行符。

解释

Shell 脚本中有个变量叫IFS(Internal Field Seprator) ,内部域分隔符。
Shell 的环境变量分为set, env两种,其中 set 变量可以通过 export 工具导入到 env 变量中。
其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。

IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量.
IFS 详细内容可参考:https://www.cnblogs.com/weq0805/p/15027357.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号