if [ $# -lt 2 ] 는 무엇을 의미하나요?

if [ $# -lt 2 ] 는 무엇을 의미하나요?

저는 유닉스/리눅스를 처음 접했습니다. 나는 나보다 먼저 개발자의 코드를 이해하려고 노력하고 있습니다. 누군가 이 줄이 무엇을 의미하는지 말해 줄 수 있나요 if [ $# -lt 2 ]?

답변1

Bash에서는 $#설정된 위치 매개변수의 수로 확장됩니다.

if [ $a -lt $b ]a 값이 b 값보다 작은 경우를 의미합니다.

if [ $# -lt 2 ]위치 매개변수 세트의 개수가 2개 미만인지 여부를 의미합니다.

실제 예제에서는 아마도 함수에 주어진 매개변수를 계산하기 위해 이것을 사용할 것입니다. 함수를 다음과 같이 정의하면:

count_words(){
  if [ $# -lt 2 ]
  then
    echo "There are less than two words."
  else
    echo "There are 2 or more words."
  fi
}

그런 다음 다른 수의 단어로 함수를 호출하면 결과는 다음과 같습니다.

$ count_words hello
There are less than two words.

$ count_words how many words
There are two or more words.

$ count_words
There are less than two words.

$ count_words two words
There are two or more words.

답변2

이는 다음 세 가지로 구성됩니다.

  • $#스크립트나 함수에 대한 위치 인수의 개수를 포함하는 쉘 변수입니다.

  • [는 특수 구문이 아니라 프로그램 이름입니다. 의 별칭입니다 test. (체크아웃 man [또는 man test.)

    의 명령줄은 [표현식으로 구문 분석됩니다. , , 및 인수 (단지 시각적 구분 기호임)를 사용하여 [ $# -lt 2 ]호출합니다 . 표현식이 true로 평가되면(즉, 스크립트에 대한 인수 수가 2보다 작은 경우) 로 설정되는 성공적인 종료 코드를 반환하고, 그렇지 않으면 실패한 종료 코드를 로 설정합니다 . 다음을 입력하면 이를 확인할 수 있습니다.[$#-lt2]$?0$?1

    [ 1 -lt 2 ]; echo $?    # 1 < 2 is true: 0
    [ 2 -lt 1 ]; echo $?    # 2 < 1 is false: 1
    
  • if condition; then body; fi명령을 평가 condition하고 성공적인 종료 코드를 반환하면 의 명령 평가를 진행합니다 body.

발생할 수 있는 몇 가지 사항에 주목할 가치가 있습니다.

  • 유틸리티 true는 항상 성공적인 종료 코드를 반환하고 false항상 실패를 반환하므로 다음과 같은 조건에서 사용할 수 있습니다.

    while true; do
    done
    
  • if [ $foo = "yes" ]$foo빈 문자열( [ = yes ]) 또는 공백이 포함된 문자열( )로 확장되면 작동하지 않습니다 [ no thanks = yes ]. 따라서 다음과 같은 내용을 자주 보게 됩니다.

    if [ "x$foo" = "xyes" ]
    

    따라서 의 첫 번째 피연산자로 [단일 인수를 받습니다 .xno thanks=

  • [[]]껍질이다예어(아님내장), 위의 제한 사항을 해결하기 위한 특수 구문 분석 규칙이 있으며 추가 기능을 제공할 수 있습니다.

관련 정보