[bash] 쉘 스크립트의 YYYY-MM-DD 형식 날짜

$(date)bash 쉘 스크립트에서 사용하려고 시도했지만 날짜 YYYY-MM-DD형식을 원합니다 .
이걸 어떻게 얻습니까?



답변

bash (> = 4.2)에서는 외부 date(보통 GNU 날짜) 대신 printf의 내장 날짜 형식 기 (bash의 일부)를 사용하는 것이 좋습니다 .

따라서 :

# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1 

# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1 

# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal

bash (<4.2)에서 :

# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')

# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')

# print current date directly
echo $(date '+%Y-%m-%d')

다른 사용 가능한 날짜 형식은 날짜 매뉴얼 페이지 에서 볼 수 있습니다 (bash 이외의 외부 명령의 경우).

man date


답변

시험: $(date +%F)


답변

다음과 같이 할 수 있습니다 :

$ date +'%Y-%m-%d'


답변

ISO 8601 표준 날짜 형식을 찾고 있으므로 GNU 날짜 (또는 1988보다 최신 날짜 명령)가있는 경우 다음을 수행하십시오.$(date -I)


답변

date -d '1 hour ago' '+%Y-%m-%d'

출력은입니다 2015-06-14.


답변

$(date +%F_%H-%M-%S)

사이에 콜론 (:)을 제거하는 데 사용할 수 있습니다.

산출

2018-06-20_09-55-58


답변

최근 Bash (버전 ≥ 4.2)에서는 printfformat 수정 자와 함께 내장 기능 을 사용할 수 있습니다 %(strftime_format)T.

$ printf '%(%Y-%m-%d)T\n' -1  # Get YYYY-MM-DD (-1 stands for "current time")
2017-11-10
$ printf '%(%F)T\n' -1  # Synonym of the above
2017-11-10
$ printf -v date '%(%F)T' -1  # Capture as var $date

printfdateBash 내장이기 때문에 date외부 명령 이므로 훨씬 빠릅니다 .

또한 서브 쉘을 포크 할 필요가 없으므로 printf -v date ...보다 빠릅니다 date=$(printf ...).