Bash を使用してファイルを配列に読み込む

Faaiq Bilal 2023年6月20日
  1. readarray メソッドを使用して、Bash を使用してファイルを配列に読み込む
  2. 一般的な方法を使用して、Bash を使用してファイルを配列に読み込む
Bash を使用してファイルを配列に読み込む

このチュートリアルでは、ファイルから行を読み取り、Bash を使用してそれらを配列にロードするいくつかの方法について説明します。

まず、readarray メソッドについて説明します。 その後、ファイルを Bash 配列に読み込むためのより一般的な方法を検討します。

readarray メソッドを使用して、Bash を使用してファイルを配列に読み込む

readarray は Bash 4.0 に付属する関数です。 この方法は、4.0 以降のすべてのバージョンの Bash で機能するはずです。

現在実行している Bash のバージョンを確認したい場合は、次のコマンドを使用できます。

echo ${Bash_VERSION}

Bash のバージョンが 4.0 未満の場合、readarray が機能しないため、次の方法にスキップできます。

次の内容のすべての例で、numbers.txt というタイトルのファイルを使用します。

numbers.txt ファイル:

1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1

このファイルを読み取り、その内容を配列に保存するための構文は次のとおりです。

readarray -t Arr < numbers.txt

構文を分解すると、コマンドの名前として readarray があり、-t改行 文字を削除し、Arr はファイルの内容が書き込まれる配列の名前です。 numbers.txt は、読み取るファイルの名前です。

読み取るファイルがスクリプトと同じフォルダーにない場合は、ファイルへの完全なパスを指定する必要があることに注意してください。

この配列の内容は、次の例に示すように読み取ることができます。

echo ${Arr[1]}

上記のコードは、ファイルの 2 行目である配列のインデックス 1 の行を出力します。

出力は次のとおりです。

2 1

配列全体を出力するには、次の構文を使用します。

echo ${Arr[@]}

この出力は次のようになります。

1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1

一般的な方法を使用して、Bash を使用してファイルを配列に読み込む

一般的なメソッドの構文は次のとおりです。

IFS=$'\r\n' GLOBIGNORE='*' command eval  'ArrName=($(cat filename))'

この配列を読み取ると、前の例に示したのと同様の構文になります。

echo ${ArrName[1]}

上記の Bash 行は、配列のインデックス 1 の内容を表示します。 ただし、配列全体の内容を表示したい場合は、これを使用できます。

echo ${ArrName[@]}

一般的な方法の説明

一般的な構文の ArrName は配列の名前ですが、cat の後の filename は読み取るファイルの名前です。 これら 2つの変数をカスタマイズして使用するために変更します。

IFS は区切り文字を定義します。この場合、\r\n です。 \r はキャリッジ リターン、\n は改行文字です。

最近のほとんどのシステムでは、\n が改行文字として使用されています。

GLOBIGNORE='*' は、ファイル名の奇妙なエッジ ケースを回避するための安全性として設定されています。 GLOBIGNORE を使用しているため、このコマンドには Bash が必要であることに注意してください (また、zshfish などの他のシェルでは必ずしも機能しない場合があります)。

注意すべきもう 1つの重要な点は、このソリューションは readarray よりも大幅に遅いということです。 これを使用する唯一の理由は、Bash のバージョンがバージョン 4.0 よりも古い場合です。

関連記事 - Bash File