次のように定義された非関連配列があるとします。
my_array=(foo bar baz)
配列に与えられた文字列が含まれているかどうかを確認するには?私はブロックの条件if
(例えばif contains $my_array "something"; then ...
)で利用可能な解決策を好みます。
ベストアンサー1
array=(foo bar baz foo)
pattern=f*
value=foo
if (($array[(I)$pattern])); then
echo array contains at least one value that matches the pattern
fi
if (($array[(Ie)$value])); then
echo value is amongst the values of the array
fi
$array[(I)foo]
foo
in が最後に現れるインデックスを返し$array
、見つからない場合は 0 を返します。このフラグは、パターン一致ではなく正確な一致であることをe
示します。e
$value
属していることを確認するには言葉匿名関数に渡し、関数本文で見つけることができる値のリスト$value
:$@
if ()(( $@[(Ie)$value] )) foo bar baz and some more; then
echo "It's one of those"
fi
値が配列に何回表示されるかを確認するには、${A:*B}
演算子(A
配列にも存在する配列の要素B
)を使用できます。
array=(foo bar baz foo)
value=foo
search=("$value")
(){print -r $# occurrence${2+s} of $value in array} "${(@)array:*search}"
または、配列要素にパターンマッチングを使用します。
(){print -r $# occurrence${2+s} of $value in array} "${(M@)array:#$value}"