zsh에서 여러 대체가 가능합니까?

zsh에서 여러 대체가 가능합니까?

새 마크다운 파일을 생성하는 함수가 있는데 어떻게 단순화할 수 있는지 궁금합니다.

  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내장 함수도 있습니다 ).strftimezsh/datetime

filename=${(%):-%D{%F}}-${${1//[^[:alnum:]]/-}:l}

관련 정보