Linux - bash - 小坑: IFS

1. 概述

  1. for 循环读取文件内容时, 输出被打得稀碎

2. 场景

  1. 需求

    1. 读入文件
    2. 逐行显示
  2. 源文件

    Continuous Delivery with Docker and Jenkins
    Jenkins 2 Up and Running
    Jenkins 2.x Continuous Integration Cookbook(3rd)
    Jenkins Fundamentals  
    
  3. 脚本

    #!/bin/bash
    
    for line in `cat ${1}` 
    do 
        echo ${line}
    done 
    
    
  4. 问题

    1. 输出的结果, 是这样的

      Continuous
      Delivery
      with
      Docker
      and
      Jenkins
      Jenkins
      2
      Up
      and
      Running
      Jenkins
      2.x
      Continuous
      Integration
      Cookbook(3rd)
      Jenkins
      Fundamentals
      

3. 解决

  1. 原因

    1. 输出前, 需要制定 ifs
  2. ifs

    1. linux 的环境变量
  3. 最终脚本

    #!/bin/bash
    
    OLD_IFS=${IFS}    
    IFS=""
    
    for line in `cat ${1}` 
    do 
        echo ${line}
    done 
    
    IFS=${OLD_IFS}
    

4. 其他

  1. ref

    1. SHELL 读取文件的每一行内容并输出
      1. 用 while 输出, 貌似就没有这个问题...
    2. Shell中IFS用法
  2. 疑问

    1. IFS 这玩意到底是什么鬼
    2. ${1} 是 bash 脚本的参数, 如果说, 脚本里有了 awk 命令, 需要引用 $1, 到底是哪个为准呢?
posted @ 2019-09-08 11:01  轩辕拾銉  阅读(432)  评论(0编辑  收藏  举报