質問: 改行で区切られた1つの配列要素を複数の要素を持つ新しい配列にマップする方法 パス/home/myusername/.local/share/nemo/scripts/folder with spaces/のnemoで4つのファイルを選択します。 nemoは、ファイルパスを環境変数nemo_script_selected_file_pathsに保存します。(以下のglenn jackmanからの回答でわかるように、nemo_script_selected_file_pathsには改行で区切られたファイルパスのリストが含まれています。)なんで「うん!」すべてのファイルパス行の後に印刷されませんか?どうすればそれを達成できますか? (このファイルパスのリストは配列であると最初は思っていたので、この質問はおそらく苛立たしいものですが、明らかにそうではありません。)[〜#〜] script [〜#〜]#!/bin/bash for i in "${nemo_script_selected_file_paths[@]}" do echo "$i" echo "yeah!" done [〜#〜] output [〜#〜]/home/myusername/.local/share/nemo/scripts/folder with spaces/script1 /home/myusername/.local/share/nemo/scripts/folder with spaces/script2 /home/myusername/.local/share/nemo/scripts/folder with spaces/script3 /home/myusername/.local/share/nemo/scripts/folder with spaces/script4 yeah!
回答: 仮定: 環境変数$nemo_script_selected_file_pathsはどういうわけか、nemoによって魔法のように設定されています。 ファイル名の改行で区切られたリストが含まれています。 次のように解析してbash配列にすることができます。$ nemo_script_selected_file_paths="file one file two file three" $ mapfile -t files <<<"$nemo_script_selected_file_paths" $ echo ${#files[@]} 3 $ printf ">>%s\n" "${files[@]}" >>file one >>file two >>file three mapfileは、標準入力を読み取り、改行で分割し、名前付き配列に行を格納するbash組み込みコマンドです。ファイル名のいずれかに改行(正当なファイル名文字)が含まれている場合、これは壊れます。