.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
해당 파일로 실제로 수행하려는 작업에 따라 달라지므로 이것이 도움이 됩니다.