0
让说我有一个数组,看起来像这样:按首字母bash中创建一个数组新的阵列
array=("aaa" "bbb" "ccc" "ddd" "eee" "fff")
,我想在阵列那些带有开始分裂成两个, b或c在一个数组中,d,e和f到另一个数组中。
如何创建一个基于字母范围中的第一个字符新的数组的?
让说我有一个数组,看起来像这样:按首字母bash中创建一个数组新的阵列
array=("aaa" "bbb" "ccc" "ddd" "eee" "fff")
,我想在阵列那些带有开始分裂成两个, b或c在一个数组中,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
语句是更好,如果你有很多简单的条件。如果你的条件比较复杂,那么使用正则表达式的if
s会更好,因为正则表达式提供的条件范围比case
的条件要强得多。
PS。如果您的值包含空格,请确保在需要的地方使用引号。
'A1 + =($ V)'似乎用于顶端更整齐 – klashxx
@klashxx THX。但是,我添加了引号,因为如果'$ v'有空格,它会向数组中添加几个条目(注意:它会使用'a [$ {#a [@]}] = $ v'添加一个单独的条目不含引号)。 – vdavid