간단한 스크립트를 테스트했지만 20번째 줄에 인수가 너무 많다는 오류가 계속 발생합니다.

간단한 스크립트를 테스트했지만 20번째 줄에 인수가 너무 많다는 오류가 계속 발생합니다.

안녕하세요, UNIX 및 Linux 사용자 여러분. Bash 스크립트에 작성한 일부 코드에 대해 질문이 있습니다. 내 프로그램은 다음을 수행해야 합니다.

사용자로부터 두 개의 문자열을 읽는 스크립트를 작성하십시오. 이 스크립트는 두 문자열에 대해 세 가지 작업을 수행합니다.

(1) 테스트 명령을 사용하여 한 문자열의 길이가 0인지, 다른 문자열의 길이가 0이 아닌지 확인하고 두 가지 결과를 사용자에게 알려줍니다. (2) 각 문자열의 길이를 결정하고 어느 것이 더 긴지 또는 길이가 같은지 사용자에게 알려줍니다. (3) 문자열이 같은지 비교합니다. 사용자에게 결과를 알려주세요.

  6 #(1) Use the test command to see if one of the strings is of zero length and if the other is
  7 #of non-zero length, telling the user of both results.
  8 #(2) Determine the length of each string and tell the user which is longer or if they are of
  9 #equal length.
 10 #(3) Compare the strings to see if they are the same. Let the user know the result.
 11 
 12 echo -n "Hello user, please enter String 1:"
 13 read string1
 14 echo -n "Hello User, please enter String 2:"
 15 read string2
 16 
 17 myLen1=${#string1} #saves length of string1 into the variable myLen1
 18 myLen2=${#string2} #saves length of string2 into the variable myLen2
 19 
 20 if [ -z $string1 ] || [ -z $string2 ]; then
 21         echo "one of the strings is of zero length"
 22 
 23 else
 24         echo "Length of The first inputted string is: $myLen1"
 25         echo "Length of The second inputted string is: $myLen2"
 26 
 27 fi
 28 
 29 if [ $myLen1 -gt $myLen2 ]; then #Determine if string1 is of greater length than string2
 30         echo "The First input string has a greater text length than the Second input string."
 31         exit 1
 32 elif [ $myLen2 -gt $myLen1 ]; then #Determine if String2 is of greater length than String1
 33         echo "The second string has a greater text length than the First string."
 34         exit 1
 35 elif [ $myLen1 -eq $myLen2 ]; then #Determine if the strings have equal length
 36         echo "The two strings have the exact same length."
 37         exit 1
 38 fi

내 스크립트는 다음 오류를 수신합니다. (그렇지 않으면 예상대로 작동합니다.)

./advnacedlab4.sh: line 20: [: too many arguments
./advnacedlab4.sh: line 20: [: too many arguments

당신의 의견을 알려주십시오. 감사해요!

답변1

Jasonwryan이 지적했듯이 테스트 중인 문자열의 공백으로부터 자신을 보호해야 합니다. 변수가 확장될 때 여전히 단일 단위로 처리되도록 변수 주위에 따옴표를 넣거나 대신 이러한 확장을 처리하는 데 더 똑똑하지만 이식성이 뛰어난 연산자를 사용할 수 있습니다 [[.[

그렇지 않고 공백이 있는 경우 다음 string1string2같은 표현식을 얻습니다.

string1="string one"
if [ -z string one ] ...

따라서 2개의 문자열 "string"과 "one"을 전달하고 -z하나의 매개변수만 사용합니다.

관련 정보