私は[これ]を見つけました1。
そして、私はこれを試しています。
x='some
thing'
y=(${x//\n/})
ダブルバックスラッシュで動作すると思っていたのですが、うまくいきませんでした。
y=(${x//\\n/})
しかし、そうではありませんでした。
欲しいものが手に入らないことをテストするために、私はこうしています。
echo ${y[1]}
取得しています。
some
thing
どちらになりたいか。
some
私は y
を配列 [some, thing]
にしたいと考えています。どうすればいいですか?
別の方法です。
x=$'Some\nstring'
readarray -t y <<<"$x"
または、bash 4 を持っていない場合は、bash 3.2 に相当するもの。
IFS=$'\n' read -rd '' -a y <<<"$x"
最初に使おうとしていた方法でもOKです。
y=(${x//$'\n'/ })
しかし、この方法では、文字列にすでにスペースが含まれている場合、例えば 'line 1\nline 2'
のように正しく機能しません。これを機能させるには、文字列を解析する前にワードセパレータを制限する必要があります。
IFS=$'\n' y=(${x//$'\n'/ })
...そして、セパレータを変更しているので、もう \n
を space
に変換する必要はないので、次のように単純化することができます。
IFS=$'\n' y=($x)
この方法は unless $x
にマッチするグロビングパターン("*
"など)が含まれている場合には、マッチするファイル名で置き換えられます。read/
readarray`メソッドは、より新しいbashのバージョンを必要としますが、すべてのケースで動作します。