2013-07-26 13 views
0

나는 다음과 같은 코드를 작성하고는 경우 :이 다음유닉스 - 다른 EOF 오류

if [ $opt -ge $max -o $opt -le 0 ] 
then 
    echo "Bad"; 
else 
    echo "Good"; 
fi //Line number 23 no Line number 24. 

:이 코드를 삽입하면

./file.sh: line 21: unexpected EOF while looking for matching `"' 
./file.sh: line 24: syntax error: unexpected end of file 

:

if [ $opt -ge $max -o $opt -le 0 ] 
then 
    echo "Bad"; 
else 
    echo "Good"; 
    if [ $opt = "\" -o $opt = "/" ] 
    then 
     echo "Good"; 
    else 
     echo "Invlaid"; //Line number 21 
    fi 
fi //Line number 23 no Line number 24. 

이 오류가 표시됩니다 오류 없음입니다. 나는 문제를 알아낼 수 없다.

+1

구문 강조 표시를 참조하십시오. 실수로 두 번째 인용구를'if [$ opt = "\"-o $ opt = "/"]'에 "이스케이프"했습니다. –

+0

논리 OR을위한'-o'는 더 이상 사용되지 않습니다. 당신은'[ ""$ opt "-ge"$ max "] ||를 사용해야한다. [ "$ opt"-le 0]'대신 확장을 인용하십시오! – chepner

답변

1

백 슬래시 \는 이스케이프하거나 다른 이 같은 작은 따옴표를을 사용할 수 있습니다 필요

"\\" 
:

if [ $opt = '\' -o $opt = '/' ]; then 
    echo "Good" 
fi 

작은 따옴표는 줄 바꿈 된 문자열을 문자 그대로 처리하므로 쉘에서 작은 따옴표를 이스케이프 할 수없는 정확한 이유입니다.

3

"\"를 쓰면 첫 번째 문자가 큰 따옴표 인 문자열 리터럴을 시작합니다. 문자열에서 백 슬래시를 포함하려면 다른과 선행해야한다 :

따옴표 안에
0
opt="\\" 

echo $opt 
\ 

if [ $opt = "/" -o $opt = "\\" ]; then echo "Hi"; else echo "bye"; fi 
Hi