Test
如何在 if 語句中正確測試文件的副檔名?
只是一個插圖:
第一的
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
)進行比較以獲得成功。