2014-09-12 4 views
0

"22 행 : 우분투 서버에 너무 많은 인수가 있습니다."오류가 발생하며 수정 방법이 너무 명확하지 않습니다. 그냥 궁금해 거기에 대한 해결책은 무엇입니까? 여기 내 코드가있다.우분투 서버에 인수가 너무 많습니다.

if [ $? -eq 0 ]; then 
    if [ $name = $ufname ]; then 
     echo "Names are still the same" 
    fi 
fi 
+1

$ 이름 또는 $ ufname이 포함될 수 있습니다 공간 – tristan

+0

** ** 당신의 문자열 변수를 견적도 빈 문자열에 방지하기 위해 접두사 추가 :'[ "Z의 $ {이름}"= "Z의 $ {ufname을} "]'. 보통 '빈 문자열/단위화된'과 '이름의 공간'문제를 처리합니다. –

+0

인용구로 빈 문자열도 처리 할 수 ​​있다고 생각했습니다. bash는 placeholder 빈 문자열 인수를'['. 권리? – anishsane

답변

2

공백이나 다른 특수 문자가 포함 된 변수에는 매우주의해야합니다. 공백은 실제로 작품을 장식 할 수 있습니다.

bash의 가장 좋은 해결책은 [ 대신 [[을 사용하는 것입니다. 우아하고 스타일있는 공백을 처리합니다. 모든 경우에 [[으로 전환하고 [을 사용하지 않는 것이 좋습니다. 휴대 성이 필요한 경우 [를 사용하는 [[ is better in all respects.

if [[ $? -eq 0 ]]; then 
    if [[ $name = "$ufname" ]]; then 
     echo "Names are still the same" 
    fi 
fi 

유일한 이유는 - 당신이 일반 쉬보다는 떠들썩한 파티를 위해 작성하는 경우처럼. 이 경우 [을 사용해야하므로 변수를 인용해야합니다.

if [ $? -eq 0 ]; then 
    if [ "$name" = "$ufname" ]; then 
     echo "Names are still the same" 
    fi 
fi 
+0

나는 그것을 시도했지만 작동하지 않는 것 같습니다. 결과가 표시되지 않습니다. –

+0

그건 별개의 문제입니다. 아마'$? '가 0이 아니거나 아마도이 두 변수가 실제로 같지 않을 수도 있습니다. 확인을 위해 인쇄물을 넣으십시오. –

+0

그건 그렇고, 내가하고있는 목적은 텍스트 파일의 이름을/etc/passwd의 이름과 일치시키는 것입니다. 이 작업을 수행 할 대체 방법이 있습니까? –

관련 문제