keyFileName=$1;
for fileExt in "${validTypes[@]}"
do
echo $fileExt;
if [[ $keyFileName == *.$fileExt ]]; then
keyStatus="true";
fi
done;
我试图检查传递的文件扩展的文件扩展,以相对于多个文件扩展名数组。但是,它似乎无法正常工作。有帮助吗?
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
在数组上循环循环以在每个元素上进行正则匹配,这似乎相当低效率。您正在使用Regex;结合表达式并避免循环循环很容易。
将阵列弄脏到有效的正则是完全微不足道的。这是我的尝试:
validTypes=('.txt' '.mp3')
fileExtRe=$(printf '|%s' "${validTypes[@]}"
# Trim off the first alternation, add parens and anchor
fileExtRe="(${fileExtRe#?})$"
if [[ $keyFileName =~ $fileExtRe ]]; then
:
请注意validTypes
中的元素现在是如何正式表达式的,dot逃脱仅与字面的点匹配。