IFSの使い方

1418 ワード

IFSって何?
IFS(Internal Field Seprator)、すなわち内部ドメイン区切り記号
IFS(Internal Field Seprator)、すなわち内部ドメイン区切り記号、完全定義は「The shell uses the value stored in IFS,which is the space,tab,and newline characters by default,to delimit words for the read and set commands,when parsing output from command substitution,and when performing variable substituioin.」
IFS表示
IFSは登録shellのローカル環境変数に存在する
[root@localhost ~]# set|grep IFS
IFS=$' \t
' [root@localhost ~]#

shellスクリプトへの適用
通常shellスクリプトでは、forループを使用して特定の文字で区切られた文字列を巡回しますが、forループのデフォルトの区切り文字はスペースで、現在のスクリプトのデフォルトの区切り文字を変更する必要があります.たとえば、次のようにセミコロンで区切られた文字列を巡回します.
#!/bin/sh
file_name='hello.txt:world.txt:test.txt'  #       
OLD_IFS=$IFS  #    IFS        ,         
IFS=':'  #       
for i in $file_name;do
  echo $i
done
IFS=$OLD_IFS  #        

指定した区切り文字にエスケープ文字が含まれています
場合によっては、エスケープ文字を使用したり、改行記号()、タブ(t)などを入力したり、IFS=''またはIFS='t'をそのまま使用するとエラーが発生する場合があります.この場合、$記号+一重引用符+エスケープ文字の形式が必要になります.例えば、改行記号をセパレータとして使用する場合は、このように設定する必要があります.
IFS=$'
'

たとえば、あるファイル(slaves)の各行の値を解析します.ファイルの内容は次のとおりです.
nginx
tomcat
hodoop
s100
kafka

shellスクリプトコードは次のとおりです.
#!/bin/sh
host_list=`cat slaves`
OLD_IFS=$IFS
IFS=$'
' # for i in $host_list;do echo $i done IFS=$OLD_IFS