bash:if條件問題

bash:if條件問題

嘗試對目錄中以 .c 結尾的所有檔案(C 檔案)執行一些操作。代碼是:

#!/bin/sh
clear
for file in *
do
    if [ $file="*.c" ]
    then
        echo $file
    fi
done
exit 0

不起作用。它只是列出所有文件和目錄。

答案1

on 的條件if格式錯誤,您只是檢查字串$file=*.c是否不為空。嘗試改為:

#!/bin/sh
clear
for file in *
do
    if [ "$file" = "*.c" ]
    then
        echo "$file"
    fi
done
exit 0

另一方面,在這種情況下,編碼字元“*”不起作用,但它被解釋為字串。

嘗試:

#!/bin/sh
clear
for file in *.c
do
    echo "$file"
done
exit 0

答案2

您的測試語句不會檢查檔案的後綴是否為.c.它檢查(在大多數情況下)是否$file等於*.c,請參閱test(1)

但是,如果您將 for 語句替換為讀取

for file in *.c

for 語句只會傳遞以結尾的文件,.c因此您不必再檢查。

答案3

另一種班輪方式是使用find

find . -name "*.c" | xargs echo

這取決於您實際想要對這些文件執行的操作,以便這對您有所幫助。

相關內容