bash: if条件の問題

bash: if条件の問題

ディレクトリ内の .c で終わるすべてのファイル (C ファイル) に対して何らかの操作を実行しようとしています。コードは次のとおりです。

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

動作しません。すべてのファイルとディレクトリを一覧表示するだけです。

答え1

の条件が不正です。文字列が空でないか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*.ctest(1)

しかし、for文を次のように置き換えた場合、

for file in *.c

for ステートメントには末尾が であるファイルのみが渡される.cため、これ以上チェックする必要はありません。

答え3

もう 1 つのワンライナーの方法は、次の使用法ですfind

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

これらのファイルで実際に何をしたいかによって異なりますが、これが役立つでしょう。

関連情報