zshで複数の置換が可能ですか?

zshで複数の置換が可能ですか?

新しいマークダウンファイルを生成する関数があり、どのように単純化できるのか疑問に思います。

  today=$(date +"%F")
  title=$1:l
  clean_title=${title//[^a-zA-Z0-9]/-}
  filename="$today-$clean_title.markdown"

title / clean_titleを1つにまとめることができると思いましたが、そのようにしようとすると、誤った置換のコンソールエラーが発生します${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}

関連情報