MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
シェルスクリプトの基礎 - IFSのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
シェルスクリプトの基礎 - IFS
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 環境変数IFS(Internal Filed Separator)には、bashの場合、スペース、タブ、改行($' \t\n')が初期設定されており、<br> これらが区切り文字(デリミタ)として認識されている。<br> <br> ファイル等を読み込む場合、文字列の区切り文字を変更するには、IFSに区切り文字とする値を設定することができる。<br> <br> 例えば、csvファイルを読み込む場合は、IFSにカンマ(,)を設定する。<br> <br> 現在のIFSの確認するには、以下のコマンドを実行する。<br> echo $IFS | od -ac <br><br> == 区切り文字を設定 == 区切り文字の設定例として、/etc/passwdファイルからユーザ名とログインシェルの情報を抜き出して表示させる。<br> この場合、/etc/passwdファイルの各フィールドの区切り文字はコロン(:)である。<br> <br> まず、IFSを設定せずに内容を抜き出せるか確認する。<br> 実行すると、初期設定では区切り文字にコロン(:)は設定されていないため、1行が全て変数USERに格納される。<br> <syntaxhighlight lang="sh"> #!/bin/bash head -n 5 /etc/passwd | while read USER PASS USERID GROUPID COMMENT HOMEDIR LOGINSHELL do echo "$USER $LOGINSHELL" done </syntaxhighlight> <br> # 出力 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin <br> 次に、IFSに:を設定して確認する。<br> <br> まず、現在のIFSの設定を変数OLDIFSでバックアップした後、IFSにコロン(:)を設定する。<br> 更に、/etc/passwdファイルの各フィールドを、それぞれ変数USER、PASS、USERID、GROUPID、COMMENT、HOMEDIR、LOGINSHELLに格納して、<br> ユーザ名とログインシェルを抜き出して表示する。<br> 最後に、変数OLDIFSを使用してIFSの設定を元に戻す。<br> <syntaxhighlight lang="sh"> #!/bin/bash OLDIFS=$IFS IFS=: head -n 5 /etc/passwd | while read USER PASS USERID GROUPID COMMENT HOMEDIR LOGINSHELL do echo "$NAME $LOGINSHELL" done IFS=$OLDIFS </syntaxhighlight> <br> # 出力 root /bin/bash bin /sbin/nologin daemon /sbin/nologin adm /sbin/nologin lp /sbin/nologin <br><br> == 空白やタブを含む文字列を扱う == 空白やタブなどを区切り文字にしない場合は、IFSの値を空にすることで、空白やタブで区切ることなく読み込むことができる。<br> <br> 以下のシェルスクリプトでは、空白を含むlist.txtファイルを使用して確認する。<br> # list.txtファイルの内容 a b c d e f g i j <br> まず、IFSを初期設定のままで実行する。<br> IFSの初期設定は、空白、タブ、改行となっているため、空白で区切られた文字が1文字ずつ変数iに格納されて、1文字ずつ表示する。<br> <syntaxhighlight lang="sh"> #!/bin/bash for i in $(cat ./list.txt) do echo $i done </syntaxhighlight> <br> # 出力 a b c d e f g i j <br> 次に、IFSの値を空に設定して実行する。<br> 区切り文字として空白が設定されていないため、1列全部が変数iに格納されて、1行ずつ表示する。<br> <syntaxhighlight lang="sh"> #!/bin/bash OLDIFS=$IFS IFS= for i in $(cat ./list.txt) do echo $i done IFS=$OLDIFS </syntaxhighlight> <br> # 出力 a b c d e f g i j <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:シェルスクリプト]]
シェルスクリプトの基礎 - IFS
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse