基本的に、文字列を文字列区切り記号(たとえばsep.
、.bash
などのツールを使用せずにこれを実行するための基本的な方法はありますか?それはうまくいきません。sed
awk
IFS
read -ra
sed
awk
文字列があり、それをThis is some sep.string
2つの要素を持つ配列に分割したいとします。This is some
string
答え1
パラメータ拡張を使用して手動で変数を繰り返すことができます。
#!/bin/bash
var='This is some sep.string
with
newlines
sep.another line'
a=()
while [[ $var =~ sep\. ]]
do
e=${var%%sep.*}
a+=("${e}")
var=${var#${e}sep.}
done
a+=("${var}")
これは変数を繰り返し(プロセスで更新)、最初の区切り文字を前方に削除します(%%
最も長い一致が見つかるため、文字列の最後から最初のインスタンスまで逆方向に追跡されますsep.
)。残りは次に追加されます。配列の残りの部分と区切り文字は変数の前の部分から削除されます。変数に区切り文字がなくなるまで繰り返し、残りを配列に追加します。
答え2
パラメータ拡張とreadarrayを使用してこれを行う基本的な方法に似ています。
string='This is some sep.string'
mapfile -t array < <( echo "${string//sep./$'\n'}" )
${string//sep./$'\n'}
sep.
- 発生を改行文字に置き換えます。mapfile
/はreadarray
各行に独自の要素を持つ配列を作成します。