文字列がある場合:
s='path/to/my/foo.txt'
と配列
declare -a include_files=('foo.txt' 'bar.txt');
配列内の一致する文字列を効率的にチェックするにはどうすればよいですか?
配列をループして、bash 部分文字列チェックを使用できます
for file in "${include_files[@]}"
do
if [[ $s = *${file} ]]; then
printf "%s\n" "$file"
fi
done
または、ループを回避したい場合で、ファイル名が一致するかどうかだけを気にする場合は@
、 bash extended globbingの形式を使用できます。次の例では、配列ファイル名に|
.
shopt -s extglob
declare -a include_files=('foo.txt' 'bar.txt');
s='path/to/my/foo.txt'
printf -v pat "%s|" "${include_files[@]}"
pat="${pat%|}"
printf "%s\n" "${pat}"
#prints foo.txt|bar.txt
if [[ ${s##*/} = @(${pat}) ]]; then echo yes; fi