if와 then에 대한 배쉬 질문 [중복]

if와 then에 대한 배쉬 질문 [중복]

나는 이것을 내 대본에 쓰고 있습니다. 다른 부분도 있는데 저는 이 부분만 짚고 넘어가겠습니다.

if [[$# == $year $month $day  ]] ; then
    cal $day $month $year
fi

실행하면 다음 메시지가 나타납니다.

[[3: command not found

그렇다면 문제는 무엇입니까? 구문인가요 아니면 실제 명령인가요?

도움이 된다면 내 스크립트의 나머지 부분은 다음과 같습니다.

year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)

if [[$# == $year $month $day  ]] ; then    
    cal $day $month $year
fi

답변1

대괄호 뒤에 공백을 추가해야 합니다 [[.

if [[ $# == $year $month $day ]] ; then    
    cal $day $month $year
fi

그리고 당신이 쓴 것처럼 이것은 작동하지 않습니다. 합계를 문자열 또는 완전히 다른 것으로 비교하고 $#있습니다 $year $month $day. 아마도:

if [[ "$#" == "$year$month$day" ]] ; then    
    cal $day $month $year
fi

답변2

이와 관련하여 많은 문제가 있습니다.

  1. 다음 뒤에는 공백이 필요합니다 [[.

    [[ $# == $year $month $day ]]
    
  2. $#그것은 당신이 생각하는 것과 다릅니다. 스크립트나 함수에 전달된 인수의 수입니다. 이것이 실제로 매개변수 목록이라고 생각하는 것 같습니다.

  3. ==문자열을 비교하려면 정렬된 목록을 제공합니다. 스크립트에 전달된 매개변수 목록을 와 비교하려면 $day $month $year다음을 수행할 수 있습니다.

    [[ "$@" == "$day $month $year" ]]
    
  4. cal이건 아니야. 내 것은 cal이렇게 작동하지 않지만확실히일부 최신 버전에서는 가능합니다. 실제로 무엇을 하려는지 모르겠지만 작동하지 않습니다. 아마도 당신은 찾고 있습니까 date -d "$day/$month/$year"? 예를 들어

    $ date -d "08/10/2014"
    Sun Aug 10 00:00:00 CEST 2014
    

    또는 특정 달의 달력을 표시하려면 다음을 수행하세요.

    $ cal 10 2014
        October 2014      
    Su Mo Tu We Th Fr Sa  
              1  2  3  4  
     5  6  7  8  9 10 11  
    12 13 14 15 16 17 18  
    19 20 21 22 23 24 25  
    26 27 28 29 30 31     
    

관련 정보