Bash의 조건에 너무 많은 매개변수가 있는 경우

Bash의 조건에 너무 많은 매개변수가 있는 경우

나는 bash를 거의 처음 접했습니다. 이 질문에 대한 답변이 다른 곳에서 있었다면 죄송합니다. 하지만 제가 이해할 수 있는 내용은 찾지 못했습니다.

if 조건을 만들고 있습니다.

if [ $inputstring = $INPUT ]

이 줄에서 "매개변수가 너무 많습니다."라는 오류가 발생했습니다. 나는 또한 다음을 시도했습니다.

  if [ "$inputstring" = "$INPUT" ]

그러나 변수가 (에코를 통해) 동일한 값을 갖는다고 판단하면 내 프로그램은 "if" 내부로 들어가지 않습니다.

누구든지 도와줄 수 있나요? 감사해요

답변1

변수에 공백이 포함되어 있으면 "인수가 너무 많아" 따옴표가 없는 확장이 여러 단어로 분할될 수 있습니다. 따라서 실제로 [ .. ]이러한 일이 발생하지 않도록 하려면 모든 변수를 인용해야 합니다.

if귀하가 작성한 두 번째 ()는 정확하며 if [ "$inputstring" = "$INPUT" ]두 변수에 동일한 데이터가 포함되어 있으면 기본 분기를 실행합니다. if그러나 출처에 따라 공백이 더 많거나 보기 어려운 다른 항목이 있을 수 있습니다. 예를 들어 printf "<%q>\n" "$INPUT"변수 내용을 명확한 형식으로 보려면 사용하세요 . (출력 형식은 변수 값에 따라 다르지만 일반적으로 인용된 값을 인쇄하거나 백슬래시 이스케이프와 함께 특수 문자를 표시합니다.)

예를 들어, 다음은 동일한 데이터를 포함하지 않고 뒤에 공백이 있는 변수입니다.

$ foo=123
$ bar="123 "
$ echo $foo $bar
123 123
$ if [ "$foo" = "$bar" ]; then echo same; else echo not same; fi
not same
$ printf "<%q>\n" "$foo" "$bar"
<123>
<123\ >

관련 정보