답변:
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
+%F %T
에 대한 바로 가기로 사용할 수 있습니다 +%Y-%m-%d %H:%M:%S
. 것을 그냥 참고 일부 파일 시스템 (기침 ** HFS)가 변환됩니다 :
A를 /
당신에게 같은 문자열을 제공 2016-09-15 11/05/00
하는 혼란 강력한입니다.
date=$(date)
대신입니다 date=`date`
. 또한 개인 변수에 대문자를 사용하지 마십시오. 대문자 변수 이름은 시스템 용으로 예약되어 있습니다.
시험: $(date +%F)
ISO 8601 표준 날짜 형식을 찾고 있으므로 GNU 날짜 (또는 1988보다 최신 날짜 명령)가있는 경우 다음을 수행하십시오.$(date -I)
date -I
작동하지 않았습니다. 접두사 'g'를 사용하는 brew 를 사용 하여 GNU coreutils 를 설치 하면 작동합니다. gdate -I
-I
GNU date
에 대해 문서화 된 옵션을 찾을 수는 없지만 충분하다는 것은 확실합니다 date +%F
.
date -d '1 hour ago' '+%Y-%m-%d'
출력은입니다 2015-06-14
.
%
.
최근 Bash (버전 ≥ 4.2)에서는 printf
format 수정 자와 함께 내장 기능 을 사용할 수 있습니다 %(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
printf
date
Bash 내장이기 때문에 date
외부 명령 이므로 훨씬 빠릅니다 .
또한 서브 쉘을 포크 할 필요가 없으므로 printf -v date ...
보다 빠릅니다 date=$(printf ...)
.
date
추가 라이브러리를로드 할 필요가 없기 때문에 이미 bash 스크립트 내 에서이 명령 을 사용하는 것보다 훨씬 빠릅니다 * . (* 나는 리눅스 서버에서 1000 회 이상 반복되는 속도의 ~ 160x 속도 차이를 측정했다)
printf -v date
서브 쉘을 포크하지 않는 것에 대한 의견을 +5 할 수 있기를 바랍니다 . 아주 좋은 정보 !!
#!/bin/bash -e
x='2018-01-18 10:00:00'
a=$(date -d "$x")
b=$(date -d "$a 10 min" "+%Y-%m-%d %H:%M:%S")
c=$(date -d "$b 10 min" "+%Y-%m-%d %H:%M:%S")
#date -d "$a 30 min" "+%Y-%m-%d %H:%M:%S"
echo Entered Date is $x
echo Second Date is $b
echo Third Date is $c
여기서 x는 사용 된 샘플 날짜입니다. 그리고 예제는 데이터 형식을 지정하고 현재 날짜보다 10 분 더 많은 날짜를 가져옵니다.