Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中检查.pgn非大小写敏感扩展的较短方法_Bash_Uppercase_Lowercase - Fatal编程技术网

在bash中检查.pgn非大小写敏感扩展的较短方法

在bash中检查.pgn非大小写敏感扩展的较短方法,bash,uppercase,lowercase,Bash,Uppercase,Lowercase,我正在编写一个bash程序,在文件夹中搜索.pgn(便携式游戏符号)文件。但在我的程序中,.pgn扩展不区分大小写。这意味着它们可以是小写或大写,也可以是两者的组合。(.Pgn、.Pgn、.Pgn等)。 因此,为了检查扩展,我执行以下操作: extension=“${file:-4}” extension=“${extension,,}” 如果[“${extension}”==“.pgn”] 我想知道是否有一种方法可以做到这一点,在一个较短的方式。我所说的更短,是指在if语句中完成所有操作。

我正在编写一个bash程序,在文件夹中搜索.pgn(便携式游戏符号)文件。但在我的程序中,.pgn扩展不区分大小写。这意味着它们可以是小写或大写,也可以是两者的组合。(.Pgn、.Pgn、.Pgn等)。
因此,为了检查扩展,我执行以下操作:

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;