我正在尝试减小下面的if
语句的大小。
if [[ "$file_extension" == "MP4" ]] || [[ "$file_extension" == "mp4" ]] || [[ "$file_extension" == "MTS" ]] || [[ "$file_extension" == "mts" ]] [[ "$file_extension" == "AVI" ]] || [[ "$file_extension" == "avi" ]]
then
echo 'Filesize of '"\"$filename_ext_only\""' before compression was '"$old_file_size"'' >> massCompressResults.txt
ffmpeg -i "$fileNameWithPath" -c:v libx265 -preset ultrafast -c:a copy "$newfile" < /dev/null
与Windows不同,Ubuntu似乎对大写和小写都严格要求,所以我想知道是否存在一种使用bash来获取扩展名的方法,而不管大小写如何(例如MP4,mp4,Mp4),并且仍然有程序对其进行处理(在这种情况下) ffmpeg)
我的if
语句可以正常工作(至少适用于大写和小写,但不能混合使用),但是它的冗长冗长在想是否可以缩小它。
答案 0 :(得分:3)
在bash
中,您可以启用扩展选项来执行此nocasematch
,这默认情况下 设置,并使用正则表达式运算符~
来组合多个匹配项合二为一。
您可以将其优化为
shopt -s nocasematch
if [[ "${file_extension}" =~ ^(mp4|mts|avi)$ ]]; then
请注意,与用于不区分大小写的全局扩展(文件名扩展)的nocaseglob
相比,此选项有所不同。 不可以互换使用。参见Additional shell options in bash
另一有用的操作是一旦使用完该选项就将其关闭,以免该选项影响其他条件语句。
shopt -u nocasematch
响应OP关于在扩展的glob标志@()
上使用正则表达式运算符的疑问,这只是一个优先事项。两者都在这里解决相同的用例,我会看到
==
的扩展glob需要另一个外壳程序选项默认启用为shopt -s extglob
。=~
支持ERE,后者使用^
和$
支持正则表达式起始停止位置,并使用|
进行替代匹配。因此,如果您愿意使用正则表达式匹配技巧,请使用它。