2

文字列がある場合:

s='path/to/my/foo.txt'

と配列

declare -a include_files=('foo.txt' 'bar.txt');

配列内の一致する文字列を効率的にチェックするにはどうすればよいですか?

4

2 に答える 2

3

配列をループして、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
于 2013-09-27T02:18:25.730 に答える