BinaryZebraのコメントからのコメントに基づいており、ここ
でテストされた最新のリビジョン。を追加command eval
すると、式を現在の実行環境に保持できますが、前の式は評価期間中のみ保持されます。
スペースやタブがなく、改行/CRだけの$IFSを使用します
$ 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がデフォルトのシェルとしてpre-4を持っていることを思い出します)
その他の注意事項:
以下のdrizztの提案に従い、フォークされたサブシェル+猫を次のように置き換えることもできます
$(</etc/passwd)
私が時々使用する他のオプションは、IFSをXIFSに設定し、後で復元することです。これを気にする必要のないSorpigalの答えも参照してください。