쉘 스크립트는 함수에서 반환된 명령을 실행하지 않습니다.

쉘 스크립트는 함수에서 반환된 명령을 실행하지 않습니다.

누군가 이것이 작동하지 않는 이유를 설명할 수 있습니까? 기간 타임스탬프에서 초를 반환하는 bash 함수가 있습니다.

쉘 스크립트 기능

seconds() { 
    result=$(echo "\"1970-01-01 $1+0\"")
    echo date +%s -d $result
}

통화 기능

seconds 00:00:02.00 #works

date +%s -d "1970-01-01 00:00:02.00+0"이 정확한 텍스트를 복사하여 작동하는 터미널에서 실행하면 다음과 같은 출력이 생성됩니다.

$(seconds 00:00:02.00) #error

그러나 이는 오류를 반환합니다.

date: extra operand ‘00:00:02.00+0"’

여기서 문제가 무엇입니까? 아니면 더 좋은 방법이 있나요?

답변1

사용할 필요가 없습니다echo여기 어느 시점에서나.

서브쉘을 사용하면 함수의 출력을 실행합니다 seconds.일반적으로 현명하지 못한지금 보고 있는 것과 같은 예상치 못한 동작이 발생할 수 있기 때문입니다.

대신 date명령 자체를 실행하도록 함수를 단순화하세요.

#!/bin/bash
seconds () {
    date -d "1970-01-01 $1+0" "+%s"
}

seconds 00:00:02.00

산출:2

관련 정보