В Bash вы можете выполнять сравнение регулярных выражений с помощью расширенной тестовой команды [[
с оператором сравнения регулярных выражений =~
.
Не могу сказать, что это лучший способ сделать это,но это, вероятно, самое простое:
array=("word1" "word2" "5" "some words" "123" "00" "the last words")
wordarray=()
numarray=()
for x in "${array[@]}"
do
# if x contains any non-digit character
if [[ $x =~ [^0-9] ]]
then wordarray+=("$x")
else numarray+=("$x")
fi
done
for x in "${wordarray[@]}"
do echo "$x"
done
for x in "${numarray[@]}"
do echo "$x"
done
# Outputs:
# word1 / word2 / some words / the last words
# 5 / 123 / 00
Это очень простая стратегия обнаружения, и она не будет отлавливать десятичные или отрицательные числа, но регулярное выражение может быть изменено, чтобы отследить их относительно легко (естьмного вопросов по этому поводу на этом сайте).