Linux 날짜 구문 분석을 FreeBSD로 포팅

Linux 날짜 구문 분석을 FreeBSD로 포팅

다음 형식의 날짜가 있습니다. date -d $datum +"%Y-%m-%d"Linux에서는 잘 작동하지만 FreeBSD에서는 다음과 같이 표시됩니다.

ERROR wrong format
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]

이에 대한 답변:

date -d $datum +"%Y-%m-%d" >/dev/null 2>&1 || echo "ERROR wrong format" 

그러나 오류를 인쇄한 다음 올바른 것처럼 보이는 코드를 계속 실행합니다. 오류를 출력하지 않고, 오류가 있을 경우 프로그램이 종료되지 않게 하려면 어떻게 해야 하나요?

답변1

테스트할 bsd 상자는 없지만 다음과 같은 것을 사용해야 할 것 같습니다:

date -f "some format" "$datum" "+%Y-%m-%d"

그리고 구문 분석이 가능하도록 들어오는 데이터의 형식을 지정해야 합니다.

답변2

Linux에서 익숙한 GNU 버전은 대부분의 다른 Unix 변형 버전보다 date더 많은 날짜 형식을 지원합니다 . date또한 다른 Unix 변형에서는 볼 수 없는 많은 옵션도 있습니다. 오직기준의 사용법은 date매개변수에 지정된 형식 +…(시스템 관리자가 시스템 날짜를 설정하는 방법이기도 함) 에 따라 현재 날짜를 표시하고 -u현지 시간대 대신 UTC를 지정하는 옵션입니다.

존재하다FreeBSD, 이 date유틸리티를 사용하면 옵션을 사용하여 날짜 형식 간을 변환 할 수 있습니다 -f. 예를 들어 date -f %s "$datum" +%Y-%m-%d에포크에서 초 단위로 표현된 날짜를 사람이 읽을 수 있는 형식으로 변환할 수 있습니다.

멋진 날짜 구문 분석을 원할 경우 coreutilsGNU 날짜가 포함된 이 패키지를 설치할 수 있습니다. 아니면 당신은 사용할 수 있습니다Date::ParsePerl의 모듈 또는dateutil파이썬에서.


대부분의 오류에서 쉘 스크립트를 중지하려면 다음을 추가하십시오.set -e#!그 선 바로 아래에 있습니다 .

오류를 명시적으로 표시하려면 오류 상태로 스크립트를 종료해야 합니다. stdout 대신 stderr에 오류를 인쇄합니다.

date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1 || {
  echo "ERROR wrong format" >&2
  exit 1
}

또는

if ! date -d "$datum" +"%Y-%m-%d" >/dev/null 2>&1; then
  echo "ERROR wrong format" >&2
  exit 1
fi

관련 정보