0
レッツは、私はこのようになりますアレー持っていると言う:bashで最初の文字ずつ配列から新しい配列を作成
array=("aaa" "bbb" "ccc" "ddd" "eee" "fff")
を、私はで始まるものと二つに配列を分割したいです、 bまたはcを1つの配列に、d、e、およびfを別の配列に格納します。
最初の文字の文字の範囲に基づいて新しい配列を作成するにはどうすればよいですか?
レッツは、私はこのようになりますアレー持っていると言う:bashで最初の文字ずつ配列から新しい配列を作成
array=("aaa" "bbb" "ccc" "ddd" "eee" "fff")
を、私はで始まるものと二つに配列を分割したいです、 bまたはcを1つの配列に、d、e、およびfを別の配列に格納します。
最初の文字の文字の範囲に基づいて新しい配列を作成するにはどうすればよいですか?
は、私はそのような何かをするだろう:
array=("aaa" "bbb" "ccc" "ddd" "eee" "fff")
a1=()
a2=()
for v in "${array[@]}"
do
if [[ "$v" =~ ^[abc] ]]
then
a1+=("$v")
else
a2+=("$v")
fi
done
は、あなたのニーズに合わせて、正規表現^[abc]
を変更することができます。この正規表現は、 "テキストがaまたはbまたはcで始まるかどうか"を示します。
あなたが埋めるために、いくつかの配列を持っている場合もcase
ステートメントを使用することがありますが、単純な条件の多くを持っている場合
array=("aaa" "bbb" "ccc" "ddd" "eee" "fff")
a1=()
a2=()
for v in "${array[@]}"
do
case "$v" in
a*|b*|c*)
a1+=("$v")
;;
d*|e*|f*)
a2+=("$v")
;;
*)
printf -- "Unknown value: %s\n" "$v" >&2
;;
esac
done
case
ステートメントが優れています。 regexがcase
のものよりもはるかに強力な条件範囲を提供するので、複雑な条件がある場合は、if
の正規表現を使用する方が良いでしょう。
PS。あなたの値に空白が含まれている場合には、必要に応じて引用符を使用してください。
'a1 + =($ v)'はもっときれいに見える – klashxx
@klashxxチップのThx。しかし、 '$ v'に空白があると配列にいくつかのエントリが追加されるので注意してください(注:' $ {#a [@]} = $ v'を使っても1つのエントリが追加されます)引用符なし)。 – vdavid