二重引用符の外にあるすべてのスペースを\ nに置き換える方法は?

二重引用符の外にあるすべてのスペースを\ nに置き換える方法は?

$variableスペースで区切られた多くの二重引用符付きのパスがあります。

echo $variable

"/home/myuser/example of name with spaces" "/home/myuser/another example with spaces/myfile"

私の変数のパスの数は変えることができ、制御されません。たとえば、次の例のようになります。

example 1: "path1" "path2" "path3" "path4"
example 2: "path1" "path2" "path3" "path4" "path5" "path6" path7" "path8"
example 3: "path1" "path2" "path3" 
example 4: "path1" "path2" "path3" "path4" "path5" "path6"

\n二重引用符内のスペースを維持しながら、二重引用符の外側のすべてのスペースを新しい行()に置き換えたいと思います。echo $variable | tr " " "\n"次のようなものを使用してくださいこれ答えはすべてのスペースを新しい行に置き換えるので、私には適していません。どうすればいいですか?

答え1

要素が次の場合いつも二重引用符の場合、quote-space-quoteをquote-newline-quoteに置き換えることができます。

$ sed 's/" "/"\n"/g' <<< "$variable"
"/home/myuser/example of name with spaces"
"/home/myuser/another example with spaces/myfile"

または(シェルパラメータ置換を使用)

$ printf '%s\n' "${variable//\" \"/\"$'\n'\"}"
"/home/myuser/example of name with spaces"
"/home/myuser/another example with spaces/myfile"

ただし、配列を使用するようにスクリプトを変更できる場合は、はるかに簡単です。

$ vararray=("/home/myuser/example of name with spaces" "/home/myuser/another example with spaces/myfile")
$ printf '"%s"\n' "${vararray[@]}"
"/home/myuser/example of name with spaces"
"/home/myuser/another example with spaces/myfile"

関連情報