bashシェルスクリプトで、IFSの設定を確認、変更する方法を解説します。
はじめに
本記事では、bashシェルスクリプトで、IFS(区切り文字)の確認方法と設定を変更する方法を説明します。
また、既存の設定をバックアップと復元する方法についても説明しています。
スクリプトの実行環境は以下となります。
- OS:AlmaLinux release 9.0 (Emerald Puma)
IFSの設定内容を確認する
IFSの設定内容を確認する方法です。
#!/bin/bash
# IFSの設定内容確認
printf "%q\n" "$IFS"
上記の実行結果です。
AlmaLinux 9.0のデフォルト設定では、区切り文字は「スペース」「タブ」「改行」となっています。
[root@STKPUB002 workspace]# sh test.sh $' \t\n'
コマンドをそのまま実行しても確認することが可能です。
[root@STKPUB002 workspace]# printf "%q\n" "$IFS" $' \t\n'
IFSの設定を変更する
IFSの設定を変更する方法です。
デフォルト値の場合
IFSをデフォルト値のまま、以下のようなファイルを読み込んでみます。
以下は、読み込むファイルで、タブや半角スペースが混在しているファイルになります。
あいうえお か き く け こ さしすせそ た ち つ て と なにぬねの は ひ ふ へ ほ
以下は、ファイルを読み込むサンプルスクリプトです。
#!/bin/bash
for str in $(cat /home/workspace/data/file1.txt);
do
echo ${str}
done
上記、サンプルの実行結果です。
タブ、半角スペース、改行の全てで区切られているので、以下のような結果になります。
[root@STKPUB002 workspace]# sh test.sh あいうえお か き く け こ さしすせそ た ち つ て と なにぬねの は ひ ふ へ ほ
タブに変更する
IFSの設定を「タブ」のみに変更するサンプルです。
試しに以下のようなファイルを読み込んでみます。
あいうえお か き く け こ さしすせそ た ち つ て と なにぬねの は ひ ふ へ ほ
サンプルのスクリプトです。
#!/bin/bash
IFS=$'\t'
for str in $(cat /home/workspace/data/file1.txt);
do
echo ${str}
done
上記、サンプルの実行結果です。
タブが記述されている箇所で、改行されています。
[root@STKPUB002 workspace]# sh test.sh あいうえお か き く け こ さしすせそ た ち つ て と なにぬねの は ひ ふ へ ほ
改行に変更する
IFSの設定を「改行」のみに変更するサンプルです。
試しに以下のようなファイルを読み込んでみます。
あいうえお か き く け こ さしすせそ た ち つ て と なにぬねの は ひ ふ へ ほ
サンプルのスクリプトです。
#!/bin/bash
IFS=$'\n'
for str in $(cat /home/workspace/data/file1.txt);
do
echo ${str}
done
上記、サンプルの実行結果です。
IFSを改行のみにしたため、半角スペースやタブでは区切られずに、ファイルに記述している1行の情報がそのまま出力されています。
[root@STKPUB002 workspace]# sh test.sh あいうえお か き く け こ さしすせそ た ち つ て と なにぬねの は ひ ふ へ ほ
IFS設定のバックアップと復元
シェルスクリプト内で、IFSを変更し、処理終了後に元に戻す方法を説明します。
#!/bin/bash
# IFSのバックアップ
IFSORG=$IFS
# IFSを変更
IFS=$'\t'
# 処理
echo 処理実行
# IFSを戻す
IFS=$IFSORG
リンク
コメント