我有一个来自命令输出的数组:
array=(saf sri trip tata strokes)
现在我想根据用户输入过滤项目。用户还可以使用通配符,因此如果用户输入*tr*
,则输出应为
trip strokes
答案1
使用以下方法更容易zsh
:
$ array=(saf sri trip tata strokes)
$ pattern='*tr*'
$ printf '%s\n' ${(M)array:#$~pattern}
trip
strokes
${array:#pattern}
:扩展到数组的元素不匹配模式。(M)
(对于匹配):恢复运算符的含义:#
以扩展为匹配的元素$~pattern
,导致 的内容$pattern
被视为模式。
答案2
一种方法是:
array=(saf sri trip tata strokes)
input=*tr*
for foo in "${array[@]}"; do
case "$foo" in
$input) printf '%s\n' "$foo" ;;
esac
done
过度热情的引用者请注意:作业中的右侧(例如*tr*
)input=*tr*
不需要引用。