뚜렷한 이유 없이 브래킷 누락 오류

뚜렷한 이유 없이 브래킷 누락 오류

주어진 입력 파일이 읽을 수 있고 일반이며 심볼릭 링크가 아닌지 확인하기 위해 bash 함수를 작성 중인데 괄호 누락 오류가 발생합니다.

function vfile(){
local infile=$1;
if [ ! $1 ]; then
        getname;
else
        getname $1;
fi;
if [ $? == 1 ]; then
        return;
else
infile=$fname;
fi;
if [ -f $infile && -r $infile ];
then
        if [ ! -h $infile ];
        then
                echo "$infile";
                (exit 0)
                return;
        else
                echo "$infile";
                (exit 1)
                return;
        fi;
else
        (exit 2)
        return;
fi
}

37행에서 오류가 발생합니다. if 문에 적절한 간격이 있기 때문에 이상하게 보입니다. 이로 인해 이러한 오류가 발생하는 것 같습니다. 그렇다면 제가 뭘 잘못하고 있는 걸까요?

답변1

&&내부적으로는 지원되지 않습니다 [...]. 바꾸다:

if [ -f $infile && -r $infile ]

그리고:

if [ -f "$infile" ] && [ -r "$infile" ]

또한 단어 분리 및 경로 이름 확장을 방지하려면 변수를 큰따옴표로 묶어야 합니다.

옆에

더 나은 호환성을 위해 다음을 교체하십시오.

function vfile(){

그리고

vfile(){

이 새로운 양식은 모든 POSIX 셸에서 실행됩니다. 이 function키워드는 bash에만 적용되며 값이 없습니다.

관련 정보