zsh 中的多次替换?

zsh 中的多次替换?

我有一个创建新 markdown 文件的函数,但我想知道如何简化它?

  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}

相关内容