シェルスクリプト IFSで区切り文字を設定するサンプル

環境
RHEL8.6

概要
環境変数「IFS」(Internal Filed Separator)には、bashの場合「スペース」「タブ」「改行」($’ \t\n’)といった値が初期設定されています。
これらが文字の区切りとして認識されています。
ファイル等を読み込んだりする場合に、読み込む文の区切り文字を変更したい場合は、「IFS」に区切り文字としたい値を設定することで、
区切りとさせる文字を好きに設定することが出来ます。

使用例

#!/bin/bash

OLDIFS=$IFS
IFS=:

head -n 10 /etc/passwd | while read NAME PASS USERID GROUPID COMMENT HOMEDIR LOGINSHELL
do
  echo "$NAME $LOGINSHELL"
done

IFS=$OLDIFS

実行結果
$sh test03.sh
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin

説明
「IFS」の設定を「OLDIFS=$IFS」でバックアップしてから「:」をIFSに設定し、「/etc/passwd」ファイルの各フィールドを、
それぞれ「NAME」「PASS」「USERID」「GROUPID」「COMMENT」「HOMEDIR」「LOGINSHELL」といった変数に格納します。

AlmaLinux

Posted by arkgame