if와 then에 대한 bash 질문

if와 then에 대한 bash 질문

나는 이것을 내 대본에 쓰고 있습니다. 다른 부분도 있는데 이 부분에서만 막히네요.

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     
    

관련 정보