sep*_*ott 5 macos zsh zshrc oh-my-zsh
我编写了一个小函数,将 Windows 路径“转换”为 OSX 路径并在 Finder 中打开它。该函数可以与 bash 完美配合,但不能与 zsh 配合使用(我使用 oh-my-zsh)。
问题是它解析特定的反斜杠组合,例如:\f、\a、\01、\02、\03等......
例如,此路径字符串是输入:
"\60_Project\6038_Projekt_Part\05_development\assets\img\facebook"
Run Code Online (Sandbox Code Playgroud)
在翻译函数之后,\f序列(来自img\facebook)被错误地翻译为空格,产生输出:
"/60_Project/6038_Project_Part_developmentssets/img
acebook"
Run Code Online (Sandbox Code Playgroud)
我的目标是只粘贴 Windows 路径,而不必手动更改任何内容。
如何使用 zsh 转义或引用字符串以获得我想要的结果?
这是我写的代码:
"\60_Project\6038_Projekt_Part\05_development\assets\img\facebook"
Run Code Online (Sandbox Code Playgroud)
用法:
"/60_Project/6038_Project_Part_developmentssets/img
acebook"
Run Code Online (Sandbox Code Playgroud)
结果应该是 Finder 打开:
/Volumes/myvolume/60_Project/6038_Project_Part/05_development/assets/img/facebook
Run Code Online (Sandbox Code Playgroud)
问题是echo在打印字符串时尝试解释字符串中的转义序列。某些版本会这样做echo;有些人只有在您通过该选项后才会这样做-e;有些打印“-e”作为其输出的一部分;有些做...其他随机的事情。基本上,如果您给出echo包含转义符和/或以“-”开头的内容,则无法知道它会做什么。
选项 1:printf改为使用。它有点复杂,因为您必须给它一个格式字符串以及要打印的实际字符串,但它更可预测。哦,还有双引号变量引用:
function parsewinpath {
printf '%s\n' "$1" | sed -e 's/\\/\//g'
}
Run Code Online (Sandbox Code Playgroud)
选项 2:正如 @chepner 指出的,您可以跳过echo、sed和整个混乱,并使用参数扩展来完成这项工作:
function openwinpath {
echo "Opening..."
open "/Volumes/myvolume${1//\\//}"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10480 次 |
| 最近记录: |