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 が必要であることに注意してください (また、zsh
や fish
などの他のシェルでは必ずしも機能しない場合があります)。
注意すべきもう 1つの重要な点は、このソリューションは readarray
よりも大幅に遅いということです。 これを使用する唯一の理由は、Bash のバージョンがバージョン 4.0 よりも古い場合です。