Linux Bash 스크립트 및 와일드카드 관련 문제

Linux Bash 스크립트 및 와일드카드 관련 문제

간단한 bash 명령이라고 생각하는데 문제가 있습니다.

나는 기본적으로 여러 파일을 반복하여 이름을 얻고 싶습니다.

`ls ./*.sql`               # list all files ending with .sql

if [ $? != 0 ]             # make sure such files exist
then
    echo "no such file"
else 
    echo "files exist"
fi

내가 달릴 때

"ls ./*.sql"

나는 내가 기대했던 것을 얻었다

./file01.sql    ./file02.sql

하지만 bash 스크립트를 실행하면

./file01.sql: line 1: some random error
./file01.sql: line 2: some random error
./file01.sql: line 3: some random error
./file02.sql: line 1: some random error
./file02.sql: line 2: some random error
./file02.sql: line 3: some random error

왜 이것이 다른지 아는 사람이 있습니까?

답변1

뒤에 나오는 따옴표입니다. 실행할 명령의 출력을 쉘에 알려줍니다.

예를 들어

`echo ls`

실행할 수 있습니다 ls.

귀하의 경우 bash에 sql 파일 실행을 요청했습니다. bash는 이것을 할 수 없고 SQL은 bash에 적합하지 않기 때문에 이것은 분명히 당신이 원하는 것이 아닙니다.

또한 이 수정 사항을 적용하더라도 스크립트는 설명된 대로 수행되지 않습니다. 다른 사람(Janis)도 이 문제를 해결하는 답변을 제공했지만 스크립트가 왜 그렇게 했는지 설명하지 않았습니다.

답변2

도착하다"여러 개의 [.sql] 파일을 만들고 해당 이름을 가져옵니다." 다음과 같이 하면 됩니다.

for f in *.sql
do
    do_whatever_with_file "$f"
done

파일만 나열하려면 다음을 수행하세요.

ls *.sql

*.sql파일이 존재 하는지 테스트하려면 다음과 같이 하십시오.

if  ls *.sql >/dev/null 2>&1
then echo sql files existing
else echo no sql files
fi

관련 정보