날짜 변수를 사용하지만 형식을 다르게 지정하세요.

날짜 변수를 사용하지만 형식을 다르게 지정하세요.

쉘 스크립트에는 다음과 같은 변수가 있습니다.
datestamp=$(date '+%Y-%m-%d_T%H-%M-%S')
datestamp_pretty=$(date '+%m/%d/%Y at %I:%M:%S %p')

첫 번째는 출력 파일 이름의 일부로 사용되고, 두 번째는 파일 내용 내에서 읽기 쉬운 날짜와 시간을 표시하는 데 사용됩니다. 개별적으로 생성되기 때문에 초가 약간 어긋날 수 있습니다. 단일 날짜 변수를 생성한 다음 두 가지 다른 방식으로 형식을 지정하는 방법이 있습니까? 그렇다면 이는 어떻게 달성됩니까?

답변1

GNU를 사용한다면 이는 매우 간단합니다 date.

먼저, 에서 가장 일반적인 시간 형식을 가져옵니다 date. 나는 에포크 시간을 얻기로 선택했습니다.

epoch=$(date +%s)

그런 다음 원하는 횟수에 관계없이 원하는 형식으로 에포크를 변환합니다.

datestamp=$(date -d @$epoch '+%Y-%m-%d_T%H-%M-%S')
datestamp_pretty=$(date -d @$epoch '+%m/%d/%Y at %I:%M:%S %p')

이는 항상 첫 번째 캡처 시간을 나타내야 합니다 $epoch.

GNU가 없으면 date시대를 인간 날짜로 변환하는 다른 방법이 필요합니다.

답변2

이는 GNU가 필요하지 않고 여러 번 date 실행할 필요도 없는 방법입니다 .date

날짜/시간 문자열에 절대 나타나지 않는 문자열을 선택하십시오. 단일 문자일 수 있습니다(예: ~^|. 하지만 데모용으로 사용하겠습니다  /foo/.

날짜 문자열 형식을 선택한 문자열과 연결하면 됩니다. (두 번째 형식에서 제거되었습니다  +.) 출력을 date변수로 캡처하고 구분 기호 문자열에서 분할합니다.

combined=$(date '+%Y-%m-%d_T%H-%M-%S/foo/%m/%d/%Y at %I:%M:%S %p')
datestamp="${combined%/foo/*}"
datestamp_pretty="${combined#*/foo/}"

관련 정보