簡體   English   中英

使用bash中的多個元素優化if語句?

[英]Optimize an if statement with multiple elements in bash?

我正在嘗試減少以下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語句工作正常(至少大寫和小寫,但沒有混合),但它超級冗長的想知道是否有辦法縮小它。

bash ,你可以啟用擴展選項來做到這一點nocasematch不是默認設置,並使用正則表達式運算符~多個匹配在一個結合起來。

你可以優化它

shopt -s nocasematch
if [[ "${file_extension}" =~ ^(mp4|mts|avi)$ ]]; then

請注意,與用於不區分大小寫的glob擴展(文件名擴展)的nocaseglob相比,此選項是不同的。 不要使用彼此互換。 請參閱bash其他shell選項

另一個有用的事情是在完成選項后關閉選項,不要讓選項影響其他條件語句。

shopt -u nocasematch

為了響應OP查詢為什么正則表達式運算符被用於擴展的glob標志@() ,這只是一個偏好問題。 兩者都在這里解決了相同的用例,更多的是我會看到的個人選擇

  1. ==的擴展glob需要默認啟用另一個shell選項作為shopt -s extglob
  2. =~支持ERE,它使用^$支持正則表達式啟動停止位置,並使用|替換匹配 如果您習慣使用正則表達式匹配技巧,請使用此選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM