コマンド出力の配列があります。
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
1つの方法は次のとおりです。
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*
引用は必要ありません。