在bash中检查.pgn非大小写敏感扩展的较短方法
我正在编写一个bash程序,在文件夹中搜索.pgn(便携式游戏符号)文件。但在我的程序中,.pgn扩展不区分大小写。这意味着它们可以是小写或大写,也可以是两者的组合。(.Pgn、.Pgn、.Pgn等)。在bash中检查.pgn非大小写敏感扩展的较短方法,bash,uppercase,lowercase,Bash,Uppercase,Lowercase,我正在编写一个bash程序,在文件夹中搜索.pgn(便携式游戏符号)文件。但在我的程序中,.pgn扩展不区分大小写。这意味着它们可以是小写或大写,也可以是两者的组合。(.Pgn、.Pgn、.Pgn等)。 因此,为了检查扩展,我执行以下操作: extension=“${file:-4}” extension=“${extension,,}” 如果[“${extension}”==“.pgn”] 我想知道是否有一种方法可以做到这一点,在一个较短的方式。我所说的更短,是指在if语句中完成所有操作。
因此,为了检查扩展,我执行以下操作:
extension=“${file:-4}”
extension=“${extension,,}”
如果[“${extension}”==“.pgn”]
我想知道是否有一种方法可以做到这一点,在一个较短的方式。我所说的更短,是指在if
语句中完成所有操作。感谢您对我的帮助。使用bash和regex:
if [[ "$file" =~ \.[Pp][Gg][Nn]$ ]]
使用带有简单模式匹配的
nocasematch
选项。不需要提取扩展名
shopt -s nocasematch
if [[ $file = *.pgn ]]; then
echo "PGN file"
fi
您已经使用了正确的语法,但可能是bash的错误版本 如果
bash--version
为3.*则替换extension=“${extension,,}”
无效
extension=“${extension,,}”
用于bash>=4
for F in Aa.png Ab.PnG ;
do
extension="${F: -4}" ;
extension="${extension,,}" ;
echo $F : $extension ;
done
备选方案1:使用tr
降低分机
extension=$( echo "${extension}"| tr "[:upper:]" "[:lower:]" )
备选方案2:使用find
和-iname
find . -iname '*.pgn'
循环的一个例子
for F in $( find . -iname '*.pgn' -print );
do
echo $F;
done
备选方案3:使用正则表达式匹配扩展名(感谢@Cyrus)
备选方案4:通过设置选项nocasematch
(感谢@chepner)来更改bash的行为
shopt-s
启用shopt-u
禁用
一个例子
file="a.PGn" ;
shopt -s nocasematch;
if [[ $file = *.pgn ]]; then
echo "PGN file";
fi;
shopt -u nocasematch;
if [[ $file = *.pgn ]]; then
echo "PGN file";
fi;
感谢您的深入解释。我很感激
file="a.PGn" ;
shopt -s nocasematch;
if [[ $file = *.pgn ]]; then
echo "PGN file";
fi;
shopt -u nocasematch;
if [[ $file = *.pgn ]]; then
echo "PGN file";
fi;