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

这取决于您实际想要对这些文件执行的操作,以便这对您有所帮助。

相关内容