1. ホーム
  2. arrays

[解決済み] Bashでテキストファイルから配列を作成する

2023-01-07 20:31:26

質問

あるスクリプトがURLを受け取り、それを解析して必要なフィールドを探し、その出力をファイルに保存するようリダイレクトします。 file.txt . 出力は、フィールドが見つかるたびに新しい行に保存されます。

ファイル.txt

A Cat
A Dog
A Mouse 
etc... 

を取りたいのですが file.txt を受け取り、新しいスクリプトでそこから配列を作成し、各行が配列内の独自の文字列変数になるようにしたいのです。今のところ、私は試してみました。

#!/bin/bash

filename=file.txt
declare -a myArray
myArray=(`cat "$filename"`)

for (( i = 0 ; i < 9 ; i++))
do
  echo "Element [$i]: ${myArray[$i]}"
done

このスクリプトを実行すると、空白のために単語が分割され、代わりに

希望する出力

Element [0]: A Cat 
Element [1]: A Dog 
etc... 

結局こうなってしまう。

実際の出力

Element [0]: A 
Element [1]: Cat 
Element [2]: A
Element [3]: Dog 
etc... 

各行の文字列全体が配列の各変数に一対一で対応するように、以下のループを調整するにはどうしたらよいでしょうか。

どのように解決するのですか?

この場合 mapfile コマンドを使用します。

mapfile -t myArray < file.txt

エラーは for -- をループさせる慣用的な方法です。 は、ファイルの

while IFS= read -r line; do echo ">>$line<<"; done < file.txt

参照 BashFAQ/005 を参照してください。