![스크립트에서 공백을 변수로 사용하여 날짜 출력 형식을 지정하는 방법은 무엇입니까?](https://linux55.com/image/73220/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EA%B3%B5%EB%B0%B1%EC%9D%84%20%EB%B3%80%EC%88%98%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%82%A0%EC%A7%9C%20%EC%B6%9C%EB%A0%A5%20%ED%98%95%EC%8B%9D%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
date
명령을 다음과 같은 형식으로 만들고 싶습니다 .
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
하지만 다음과 같은 스크립트에서 호출할 수 있도록 변수에 저장하고 싶습니다.
echo "$(nice_date) [WARNING] etc etc"
그러나 그것은 작동하지 않습니다
$ nice_date="date +%Y-%m-%d %H:%M:%S"
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S’
Try 'date --help' for more information.
$ nice_date="date +\"%Y-%m-%d %H:%M:%S\""
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
$ nice_date='date +"%Y-%m-%d %H:%M:%S"'
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
date 명령이 올바른 매개변수를 얻도록 이를 수행하는 올바른 방법은 무엇입니까?
답변1
예제가 실패한 이유는 쉘의 단어 분리가 작동하는 방식 때문입니다. 을 실행하면 "$($nice_date)"
셸은 date
두 개의 인수 "+%Y-%m-%d"
와 를 사용하여 명령을 실행합니다 "%H:%M:%S"
. 날짜의 형식 문자열은 단일 인수여야 하기 때문에 실패합니다.
이를 수행하는 가장 좋은 방법은 명령을 변수에 저장하는 대신 함수를 사용하는 것입니다.
format_date() {
# echo is not needed
date "+%Y-%m-%d %H:%M:%S" "$@"
}
format_date
format_date -d "2015-09-17 16:51:58"
echo "$(format_date) [WARNING] etc etc"
실제로 명령을 변수에 저장하려면 배열을 사용할 수 있습니다.
nice_date=(date "+%Y-%m-%d %H:%M:%S")
# again echo not needed
"${nice_date[@]}" -d "2015-09-17 16:51:58"
변수에 명령을 저장하는 과정의 복잡성에 대한 자세한 내용은 다음을 참조하세요.배쉬 FAQ 050.
답변2
간단한 방법은 \를 사용하여 공간을 "탈출"하는 것입니다.
nice_date="date +%Y-%m-%d\ %H:%M:%S"
답변3
나는 기능이 가장 좋은 방법이라는 데 동의합니다. 대안으로 전체 명령 대신 형식을 변수로 저장하십시오.
$ nice_date='+%Y-%m-%d %H:%M:%S'
$ echo "$(date "$nice_date") [WARNING] etc etc"
답변4
바꾸다:
nice_date="date +%Y-%m-%d %H:%M:%S"
echo "$($nice_date)"
노력하다:
nice_date_format="+%Y-%m-%d %H:%M:%S"
echo $(date "$nice_date_format")
또한 마지막 명령 대체가 필요하지 않습니다.
date "$nice_date_format"