keyFileName=$1;
for fileExt in "${validTypes[@]}"
do
echo $fileExt;
if [[ $keyFileName == *.$fileExt ]]; then
keyStatus="true";
fi
done;
我正在尝试检查针对多个文件扩展名数组传入的文件的文件扩展名。然而,它似乎没有正常工作。有什么帮助吗?
答案 0 :(得分:1)
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
答案 1 :(得分:0)
循环数组以对每个元素进行正则表达式匹配似乎效率很低。你正在使用正则表达式;很容易将表达式组合在一起并避免循环。
将数组迁移到有效的正则表达式并不是完全无关紧要的。这是我的尝试:
validTypes=('\.txt' '\.mp3')
fileExtRe=$(printf '|%s' "${validTypes[@]}"
# Trim off the first alternation, add parens and anchor
fileExtRe="(${fileExtRe#?})$"
if [[ $keyFileName =~ $fileExtRe ]]; then
:
注意validTypes
中的元素现在是正则表达式,点转义只与文字点匹配。