如何使 *sh 行更短

Pyt*_*Nut 7 zsh

最近遇到一行zsh代码

ls_colors_parsed=${${(@s.:.)LS_COLORS}/(#m)\**=[0-9;]#/${${MATCH/(#m)[0-9;]##/$MATCH=$MATCH=04;$MATCH}/\*/'=(#b)($PREFIX:t)(?)*'}}
Run Code Online (Sandbox Code Playgroud)

这不仅会烧伤我的眼球,而且远远超过 80 个字符的限制。不幸的是,我没有看到任何明确的方法来缩短它。我有很多这样的台词(由无法切成碎片的极其复杂的替换组成)。如果我希望它们的长度小于 80 个字符,那么处理这些行的规范方法是什么。

Ada*_*hon 2

您可以通过转义的换行符来打破长行,\换行符后面紧跟着一个换行符:

ls_colors_parsed=${${(@s.:.)LS_COLORS}/(#m)\**=[0-\
9;]#/${${MATCH/(#m)[0-9;]##/$MATCH=$MATCH=04;$MATC\
H}/\*/'=(#b)($PREFIX:t)(?)*'}}
Run Code Online (Sandbox Code Playgroud)

警告

虽然几乎在任何地方都可以用这种方式换行,但也有例外。它不适用于单引号文本内或\转义序列 ( \n, \x40, ...) 之后。其他一些 shell 结构也可能会中断:如果您在示例中将 try to break 放在 和 之间($PREFIX:t)它将无法正常工作。