Test

如何在 if 語句中正確測試文件的副檔名?

  • March 9, 2017

只是一個插圖:

第一的

cd /usr/lib

並執行

for x in $(ls);do if [ "$x" == "*.a" ];then echo $x;fi;done

我想要做的是選擇副檔名為 .a 的文件並列印它們。我知道有更簡單的方法可以做到這一點,但這不是我的意圖。

問題是上面的命令不起作用。我不知道為什麼。我從這篇文章中學到了這一點

我也試過

[ "$x" == *.a ]    bash: [: too many arguments
[ $x = "*.a" ]    shows nothing
[ $x = *.a ]    bash: [: too many arguments

我知道[[ $x == *.a ]]有效,但我想知道[在這種情況下編寫測試的正確方法是什麼?

for x in ./*; do
  case $x in
     *".a" ) echo "$x";;
  esac
done

[構造並不完全適合於此。但如果你堅持,我們可能會這樣做:

[ '.a'  =  ".${x##*.}" ]

解釋

假設 $x 包含:my.file.testing.a然後${x##*.}將 ,從左側開始,盡可能多地剝離,直到.它設法在 中看到的最後一個$x。IOW,我們最終放棄了一切,把extension視覺化a帶到了前台。所以現在我們有了剛剛計算的擴展,可以與我們認為最好的擴展(.a)進行比較以獲得成功。

引用自:https://unix.stackexchange.com/questions/350288