我正在寻找一种方法来转义包含格式说明符和特殊字符(如引号、反斜杠和换行符)的变量,以便在将其传递给print -P
它时会按字面意思打印出来。
所以基本上我希望这两个打印相同:
> cat file.txt
> my_var="$(cat file.txt)"
> print -P "${<magic>my_var}"
我使用的测试用例的一个很好的示例文件是:
Backslash \
Double Backslash \\
Single Quote '
Double Quote "
-----------------------
Escaped Linebreak \n
-----------------------
Color codes: %F{red}not red%f
Variable expansion $SHELL
我得到的最接近的是${${(q+)my_var}//\%/%%}
,尽管引号、换行符、反斜杠和变量扩展存在问题:
$'Backslash Double Backslash \
Single Quote '
Double Quote "
-----------------------
Escaped Linebreak \n
-----------------------
Color codes: %F{red}not red%f
Variable expansion /usr/bin/zsh'
我知道printf '%s\n' "$my_var"
。但是在实践中,print -P
变量周围有很多实际的格式,所以这对我没有用。print -P
遗憾的是,围绕变量和实际变量使用printf
也不起作用,因为在某些情况下,字符串操作被应用于变量的内容。