2012-11-19 6 views
0

내가 총 분 즉 "11시 22분"에 시간 문자열을 변환하는 기능을 만들려고하고 682기본 bash는 스크립트 기능 추가 변수

str_to_min(){ 
    ARR_T=$(echo $1 | tr ":" "\n") 
    HOUR=${ARR_T[0]} 
    MINUTE=${ARR_T[1]} 
    let MIN=(60*$HOUR) 
    let MIN=($MIN+$MINUTE) 
    #echo total minutes $MIN 
    return $MIN 
} 

str_to_min "11:22" 

반환 그러나 나는 다음과 같은 오류가 계속 것 :

./find_service_to_display.sh : 라인 5 :하자 : MIN = (60 * 11 : 누락 )' (error token is "11") ./find_service_to_display.sh: line 6: let: MIN=(11: missing) '(에러 토큰이 "11"이다)

+0

디버깅에'echo' 또는'printf'를 사용하려고 시도 했습니까? –

+0

작동하지 않는 이유는'ARR_T = $ (echo $ 1 | tr ":" "\ n")'은 배열을 생성하지 않기 때문에 중간에 개행 문자가있는 문자열 변수를 생성합니다. 그런 다음 그것을 사용할 때 표현의 중간에 개행을하면 문제가 발생합니다. –

답변

1

이것을 시도 :

str_to_min() { 
    local hours=${1%:*}; 
    local mins=${1#*:}; 
    echo $((hours * 60 + mins)); 
} 
,

리턴 상태 (프로그램 종료 코드와 같은 역할을 함)가 실제로 필요하지 않으면 'return'보다는 'echo'를 원할 수 있습니다.

0
str_to_min() { echo $1 | awk -F: '{print 60*$1 + $2}'; } 

이 값을 반환하지 않지만 표준 출력으로 인쇄합니다. 반환 값은 0-255 범위에 있어야하고 해당 범위로 잘립니다. 실제로 값을 반환 할 수 없습니다. 이 함수는 성공을 나타 내기 위해 항상 0을 반환합니다. 문자열이 올바른 형식이 아닌 경우 오류 값을 반환하는 것이 좋습니다. 간단한 점검을위한 한 가지 아이디어는 다음과 같습니다 :

str_to_min() { echo "$1" | awk -F: '/^[0-9]+:[0-9]+$/{ print 60*$1 + $2; exit(0)} 
    {exit 1}'; }