ディレクトリ内の .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
*.c
test(1)
しかし、for文を次のように置き換えた場合、
for file in *.c
for ステートメントには末尾が であるファイルのみが渡される.c
ため、これ以上チェックする必要はありません。
答え3
もう 1 つのワンライナーの方法は、次の使用法ですfind
。
find . -name "*.c" | xargs echo
これらのファイルで実際に何をしたいかによって異なりますが、これが役立つでしょう。