새 마크다운 파일을 생성하는 함수가 있는데 어떻게 단순화할 수 있는지 궁금합니다.
today=$(date +"%F")
title=$1:l
clean_title=${title//[^a-zA-Z0-9]/-}
filename="$today-$clean_title.markdown"
title/clean_title을 하나로 결합할 수 있다고 생각했는데 그런 식으로 시도하면 잘못된 대체에 대한 콘솔 오류가 발생합니다 ${1:l...
. ${$1:l...
가능합니까?
답변1
이러한 ${...}
비트를 중첩하되 향후 독자가 코드를 읽을 수 있는지도 고려하세요.
() { clean_title=${${1:l}//[^a-zA-Z0-9]/-}; printf "$clean_title" } " BLA "
또한 A-Z
이전에 소문자를 고려하면 일치가 의미가 없을 수도 있습니다.
답변2
에서는 zsh
매개변수 확산 연산자를 중첩할 수 있습니다. 프롬프트 확장을 통해 날짜를 얻을 수도 있습니다 ( %D{%F}
좀 더 장황하고 읽기 쉬운 코드를 원하는 경우 모듈에 zsh
내장 함수도 있습니다 ).strftime
zsh/datetime
filename=${(%):-%D{%F}}-${${1//[^[:alnum:]]/-}:l}