mapfile - 標準入力から行を読み込み配列変数に代入する

スポンサーリンク

mapfileコマンドはBashの組み込みコマンドで標準入力から行を読み込み、その内容を配列変数に代入します。使い方はreadコマンドに似ています。配列変数には標準入力からの内容を改行で区切って、それぞれの要素に入ります。

また、同じ機能の別名コマンドとしてreadarrayコマンドがあります。

スポンサーリンク

mapfileコマンドの利用例

配列変数に代入
(オプションなし)

mapfileコマンドは変数名を引数に取ります。標準入力から内容を読み込み、それぞれの行を配列の要素に格納していきます。それぞれの要素の最後に改行が入っていることに注意が必要です。

data.txt

コマンド例と実行結果

 

引数が何も指定されていない場合は、変数MAPFILEに代入されます。

コマンド例と実行結果

 

 

 

区切り文字を取り除く
(-tオプション)

-tオプションを用いると配列要素の最後に入る区切り文字を取り除いて、データを格納できます。

コマンド例と実行結果

 

 

 

最初のn行を切り捨てる
(-sオプション)

-sオプションを用いると標準入力より最初の行から指定した数字分だけを切り捨てた状態でデータを格納できます。

data2.txt

コマンド例と実行結果

 

 

標準入力から代入する行数を指定
(-nオプション)

-nオプションを用いるとどこまでの行数を配列変数に格納するかを指定できます。
行数に0を指定した場合、全ての行が配列変数に格納されます。

data2.txt

コマンド例と実行結果

 

 

 

配列変数の開始要素番号を指定
(-Oオプション)

-Oオプションはどの要素番号からデータを格納するかの指定できます。デフォルトでは0からデータが格納されていきます。

data.txt

コマンド例と実行結果

 

 

 

ファイルディスクリプタを指定して入力
(-uオプション)

リダイレクトをするときに'>'や'<'の前に数字を入れる場合、その数字はファイルディスクリプタ(file descriptor, fd)を表します。よく使用されるファイルディスクリプタとして、0が標準入力、1が標準出力、2が標準エラー出力を表します。'>'を指定してfdを省略した場合は、1の標準出力が、'<'を指定してfdを省略した場合は0が使用されます。

-uオプションを用いるとファイルディスクリプタを指定して入力を行うことができます。また、ファイルディスクリプタの設定を変更するコマンドとしてexecコマンドがあります。

コマンド例と実行結果

 

 

 

コールバック
(-Cオプション)

-Cオプションを用いるとコールバック(callback)を設定できます。コールバックは一定の行が読み込まれたときに呼び出され、配列変数に代入される前に評価されます。

コールバックが呼び出される行は-cオプションで指定します。デフォルトでは5000になります。

コールバックが評価されるときに追加の引数として、配列変数に割り当てられる要素番号とその内容が渡されます。

コマンド例と実行結果

 

 

 

参考

GNU Bash manual