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