我在打开您的终端时制作自定义zsh主题。我使用oh-my-zsh并不是那么新,但我是zsh文档的新手。
以下是我遇到的问题:
wolf='
.-'''''-.
.' `.
: :
: :
: _/| :
: =/_/ :
`._/ | .'
( / ,|...-'
\_/^\/||__
_/~ `""~`"` \_
__/ -'/ `-._ `\_\__
/ /-'` `\ \ \-.\\
'
print -P $wolf
当我在终端尝试时,我遇到两个错误:
/Users/User/.oh-my-zsh/themes/wolf.zsh-theme:4:没有这样的文件或目录:。 .\n : :\n : :\n : _/| :\n : =/_/ :\n
._ / |
/Users/User/.oh-my-zsh/themes/wolf.zsh-theme:31:在\ n
我猜这些错误与ASCII艺术中的撇号有关。
答案 0 :(得分:0)
此处的问题(jdv中注明为his comment)引用。
在zsh
:
'
)。两个单引号内的任何文本都是逐字记录的,不能进行额外的引用。单引号只能用前面的反斜杠或双引号引用。"
)反引号(`
)中,美元符号($
)和反斜杠(\
)会被特别处理,需要引用带有前面的反斜杠。由于你的ASCII艺术中出现了很多这些字符,你必须确保它们都被正确引用。
此外,您使用内置print
,默认情况下也会将\
解释为转义字符。
有两种基本解决方案:
完全引用字符串并使用print -r
或echo -E
打印文本。在这两种情况下,参数都会禁用转义序列处理。
实现完整引用的最简单方法可能是保留周围的单引号,并将'
替换为'\''
。在每次出现时都会关闭之前的单引号文本,添加引用的单引号并启动新的单引号文本。然后在单引号内引用任何其他特殊字符。
wolf='
.-'\'''\'''\'''\'''\''-.
.'\'' `.
: :
: :
: _/| :
: =/_/ :
`._/ | .'\''
( / ,|...-'\''
\_/^\/||__
_/~ `""~`"` \_
__/ -'\''/ `-._ `\_\__
/ /-'\''` `\ \ \-.\\
'
print -r $wolf
将 here-document 与cat
一起使用,以避免整个引用问题:
cat <<'END'
.-'''''-.
.' `.
: :
: :
: _/| :
: =/_/ :
`._/ | .'
( / ,|...-'
\_/^\/||__
_/~ `""~`"` \_
__/ -'/ `-._ `\_\__
/ /-'` `\ \ \-.\\
END
请注意'END'
周围的单引号。这需要完成,以便在here-document中禁用参数替换($FOO
)和命令替换($(command)
或`command`
)。