this が見つかりました。
そして私はこれを試しています:
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"
最初に使用しようとしていた方法でも実行できます。
y=(${x//$'\n'/ })
ただし、文字列に'line 1\nline 2'
などのスペースが既に含まれている場合、これは正しく機能しません。動作させるには、解析する前にWordの区切り文字を制限する必要があります。
IFS=$'\n' y=(${x//$'\n'/ })
...そして、セパレータを変更しているので、\n
をspace
に変換する必要がなくなり、次のように単純化できます:
IFS=$'\n' y=($x)
このアプローチは機能しますnless$x
には一致するグロビングパターン( "*
"など)が含まれます。この場合、一致するファイル名に置き換えられます。 read
/readarray
メソッドには新しいbashバージョンが必要ですが、すべての場合に機能します。