keyFileName=$1;
for fileExt in "${validTypes[@]}"
do
echo $fileExt;
if [[ $keyFileName == *.$fileExt ]]; then
keyStatus="true";
fi
done;
我试图检查一个文件扩展名的文件传递对多个文件扩展名的数组。但它似乎没有正常工作。任何帮助?Bash正则表达式比较不起作用
keyFileName=$1;
for fileExt in "${validTypes[@]}"
do
echo $fileExt;
if [[ $keyFileName == *.$fileExt ]]; then
keyStatus="true";
fi
done;
我试图检查一个文件扩展名的文件传递对多个文件扩展名的数组。但它似乎没有正常工作。任何帮助?Bash正则表达式比较不起作用
validTypes=(".txt" ".mp3")
keyFileName="$1"
for fileExt in "${validTypes[@]}"
do
echo $fileExt;
if [[ $keyFileName =~ ^.*$fileExt$ ]]; then
keyStatus="true";
echo "Yes"
fi
done;
实际上,你可以改变你的if语句要么:
if [[ $keyFileName == ?*$fileExt ]] # Glob pattern case, ? denotes single char
或:
if [[ $keyFileName =~ .*$fileExt ]] # Regex case, . denotes single char
的比较感谢它的作品我错误的东西 –
循环数组做每个元素的正则表达式匹配上也显得十分低效。你正在使用正则表达式;很容易组合表达式并避免循环。尽管如此,将数组转换为有效的正则表达式并不是完全微不足道的。这里是我的尝试:
validTypes=('\.txt' '\.mp3')
fileExtRe=$(printf '|%s' "${validTypes[@]}"
# Trim off the first alternation, add parens and anchor
fileExtRe="(${fileExtRe#?})$"
if [[ $keyFileName =~ $fileExtRe ]]; then
:
注意在validTypes
元素如何是正则表达式现在,用点逃到只匹配一个点。
哪部分似乎不能正常工作? –
keyFileName == *。$ fileExt –