쉘 스크립트에는 다음과 같은 변수가 있습니다.
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/}"