shell命令之 IFS詳解


一、IFS的概念

Shell 腳本中有個變量叫IFS(Internal Field Seprator) ,內部域分隔符

Shell 的環境變量分為set, env兩種,其中 set 變量可以通過 export 工具導入到 env 變量中。

其中,set 是顯示設置shell變量,僅在本 shell 中有效;env 是顯示設置用戶環境變量 ,僅在當前會話中有效。

換句話說,set 變量里包含了env 變量,但set變量不一定都是env 變量。這兩種變量不同之處在於變量的作用域不同。顯然,env 變量的作用域要大些,它可以在 subshell 中使用。

IFS 是一種 set 變量,當 shell 處理"命令替換"和"參數替換"時,shell 根據 IFS 的值,默認是 space, tab, newline 來拆解讀入的變量,然后對特殊字符進行處理,最后重新組合賦值給該變量

二、IFS概念實例操作

查看IFS的值發現env | grep IFS為空,而set | grep IFS有值,說明IFS是局部變量

IFS是以空格、制表符、換行符來進行分隔的

三、IFS實例操作一:設置分割符

#!/bin/bash
#cat name.txt

OLDIFS=$IFS
#IFS=$"\n"
IFS=$'\n'
#IFS="\n"
for i in $(cat name.txt)
do
  echo $i
done
IFS=$OLDIFS

  

四、介紹  IFS 、$ 、單雙引號

1、單雙引號賦值給IFS的對比

IFS="\n"
IFS=$"\n"
IFS=$'\n'

這三個賦值看起來都比較像”將換行符賦值給IFS“,但實際上只有最后一種寫法才是我想要的結果。
IFS="\n" //將字符n作為IFS的換行符。

IFS=$"\n" //這里\n確實通過$轉化為了換行符,但僅當被解釋時(或被執行時)才被轉化為換行符;第一個和第二個是等價的

IFS=$'\n' //這才是真正的換行符。

2、IFS=‘\n’ 的輸出結果

3、IFS=$"\n" 的輸出結果

4、IFS="\n" 的輸出結果

五、while read的應用

1、格式

while read  變量名

2、用法一:格式

while read 變量名(line)

do

       …

done < file

read通過輸入重定向,把file的第一行所有的內容賦值給變量line,循環體內的命令一般包含對變量line的處理;

然后循環處理file的第二行、第三行...一直到file的最后一行。

read命令也有退出狀態,當它從文件file中讀到內容時,退出狀態為0,循環繼續;

當read從文件中讀完最后一行后,下次便沒有內容可讀了,此時read的退出狀態為非0,所以循環才會退出。  

3、用法二:格式

command | while read line

do

    …

done
command命令的輸出作為read循環的輸入,這種結構常用於處理超過一行的輸出,當然awk也很擅長做這種事。

4、實例操作

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM