如何用 zsh 回显文字变量值
how to echo literal variable value with zsh
我有一个简单的 shell 函数可以将 *nix 风格的路径转换为 Windows 风格(我碰巧使用 Windows 子系统来实现 Linux)。
# convert "/mnt/c/Users/josh" to "C:\Users\josh"
function winpath(){
enteredPath=
newPath="${enteredPath/\/mnt\/c/C:}" # replace /mount/c/ with C:
newPath="${newPath//\//\}" # replace / with \
echo $newPath
}
期望的行为是:
$ winpath /mnt/c/Users/josh
C:\Users\josh
这在 bash 中工作正常,但在 zsh 中,echo
似乎对 $newPath
值做了一些额外的插值。它的行为是这样的:
$ winpath /mnt/c/Users/josh
C:sers\josh
echo
内插的字符序列是什么,为什么要删除 \U?最重要的是,我如何 return 文字值?
我试过深入研究 zsh 文档,但它是一片丛林。提前致谢!
zsh
处理 bash
默认情况下不处理的某些转义序列。 \U
引入了 4 字节 Unicode 代码点,但由于以下 8 个字符不是有效的十六进制数,因此不会替换任何字符。
我建议使用 printf
,因为它的行为在 shell 到 shell 之间更容易预测。
printf '%s\n' "$newPath"
问题是您使用的是内部命令 echo
,而不是外部命令。如果你会写
command echo $newPath
你会得到预期的输出。 command
强制zsh根据当前PATH
查找命令字,忽略内部命令、别名或同名函数
我有一个简单的 shell 函数可以将 *nix 风格的路径转换为 Windows 风格(我碰巧使用 Windows 子系统来实现 Linux)。
# convert "/mnt/c/Users/josh" to "C:\Users\josh"
function winpath(){
enteredPath=
newPath="${enteredPath/\/mnt\/c/C:}" # replace /mount/c/ with C:
newPath="${newPath//\//\}" # replace / with \
echo $newPath
}
期望的行为是:
$ winpath /mnt/c/Users/josh
C:\Users\josh
这在 bash 中工作正常,但在 zsh 中,echo
似乎对 $newPath
值做了一些额外的插值。它的行为是这样的:
$ winpath /mnt/c/Users/josh
C:sers\josh
echo
内插的字符序列是什么,为什么要删除 \U?最重要的是,我如何 return 文字值?
我试过深入研究 zsh 文档,但它是一片丛林。提前致谢!
zsh
处理 bash
默认情况下不处理的某些转义序列。 \U
引入了 4 字节 Unicode 代码点,但由于以下 8 个字符不是有效的十六进制数,因此不会替换任何字符。
我建议使用 printf
,因为它的行为在 shell 到 shell 之间更容易预测。
printf '%s\n' "$newPath"
问题是您使用的是内部命令 echo
,而不是外部命令。如果你会写
command echo $newPath
你会得到预期的输出。 command
强制zsh根据当前PATH
查找命令字,忽略内部命令、别名或同名函数