bash: 조건 문제인 경우

bash: 조건 문제인 경우

.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

반면, 이 경우 comoding char '*'는 작동하지 않지만 문자열로 해석됩니다.

노력하다:

#!/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

해당 파일로 실제로 수행하려는 작업에 따라 달라지므로 이것이 도움이 됩니다.

관련 정보