bash: 조건 문제인 경우

bash: 조건 문제인 경우

디렉터리에서 .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

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

관련 정보