zsh - 如何用 zsh 回显文字变量值
问题描述
我有一个简单的 shell 函数来将 *nix 风格的路径转换为 Windows 风格(我碰巧使用的是 Linux 的 Windows 子系统)。
# convert "/mnt/c/Users/josh" to "C:\Users\josh"
function winpath(){
enteredPath=$1
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?最重要的是,我如何返回文字值?
我试过挖掘 zsh 文档,但它是一片丛林。提前致谢!
解决方案
zsh
bash
处理某些默认情况下不处理的转义序列。\U
引入了 4 字节的 Unicode 代码点,但由于后面的 8 个字符不是有效的十六进制数,因此没有字符被替换。
我建议使用printf
,因为它的行为在 shell 之间更容易预测。
printf '%s\n' "$newPath"
推荐阅读
- javascript - 安全警报 - 如何解决?
- node.js - 在 react-native 中播放来自节点流的音频
- python - 为什么这个简单的两行 python 网页抓取代码在 python 解释器中正确执行,但在我的 PC 上却没有?
- google-bigquery - 如何从本地机器访问 GCP bigquery API?
- html - CSS和HTML-下拉菜单下推内容-位置:相对和绝对不起作用
- php - 根据条件显示备用字段
- javascript - 为什么 Angular Stripe 集成需要 ChangeDetectorRef.detectChanges()?
- aws-lambda - 在 DynamoDB 中处理用户的喜好
- javascript - 按键比较 2 个对象
- swift - 在具有与视图相同的角半径的 UIView 上应用阴影