1. ホーム
  2. arrays

[解決済み] ファイルからBashの配列に行を読み込む【重複

2022-03-10 01:53:17

質問

行を含むファイルをBashの配列に読み込もうとしています。

これまで以下のように試してみました。

試行1

a=( $( cat /path/to/filename ) )

試み2

index=0
while read line ; do
    MYARRAY[$index]="$line"
    index=$(($index+1))
done < /path/to/filename

どちらの試みも、ファイルの最初の行を含む1要素の配列を返すだけです。私は何を間違えているのでしょうか?

bash 4.1.5を使用しています。

解決方法を教えてください。

のコメントを基にした最新リビジョンです。 BinaryZebraのコメント ここでテスト . を追加しました。 command eval によって、現在の実行環境に式を保持することができます。一方、それ以前の式は eval の間だけ保持されます。

スペースタブがなく、改行だけの$IFSを使用する/CR

$ IFS=$'\r\n' GLOBIGNORE='*' command eval  'XYZ=($(cat /etc/passwd))'
$ echo "${XYZ[5]}"
sync:x:5:0:sync:/sbin:/bin/sync

また、配列を正しく設定しても、読み方が間違っている可能性があることにも注意してください。 "" と中括弧 {} 上記の例のように


編集する

私の回答について、グロブ展開の可能性についてのコメントで多くの警告があることに注意してください、具体的には gniourf-gniourf さんのコメント を回避するための私の以前の試みについて

これらの警告を念頭に置いて、私はまだこの答えをここに残しています(はい、bash 4は何年も前に出ていますが、私はわずか2/3年前の一部のMacがデフォルトシェルとしてプリ4を持っていることを思い出します)。

その他の注意点

以下のdrizztさんの提案に従って、フォークしたsubshell+catを以下のように置き換えることもできます。

$(</etc/passwd)

もう一つの方法は、IFSをXIFSに設定し、その後リストアする方法です。 以下も参照してください。 Sorpigalの回答 わざわざこんなことをする必要はない。