当前位置: 首页 > 知识库问答 >
问题:

ZSH:用反斜杠转义或引用字符串

郭星文
2023-03-14

我写了一个小函数,将Windows路径“转换”为OSX路径,并在Finder中打开它。该函数与bash完美配合,但与zsh(我使用的是oh-my-zsh)不配合。

问题是,它会解析特定的反斜杠组合,例如:\f\a\01\02\03

例如,以下路径字符串是输入:

"\60_Project\6038_Projekt_Part\05_development\assets\img\facebook"

在转换函数之后,\f 序列(来自 img\facebook)被错误地翻译为空格,从而产生输出:

"/60_Project/6038_Project_Part_developmentssets/img
                                                                                   acebook"

我的目标是只粘贴到Windows路径中,而不必手动更改任何内容。

如何用zsh转义或引用一个字符串,才能得到我想要的结果?

这是我写的代码:

function parsewinpath {
  echo $1 | sed -e 's/\\/\//g'
}

function openwinpath {
  echo "Opening..."
  open $(parsewinpath "/Volumes/myvolume$1")
}

用法:

openwinpath '\60_Project\6038_Project_Part\05_development\assets\img\facebook'

结果应该是Finder打开:

/Volumes/myvolume/60_Project/6038_Project_Part/05_development/assets/img/facebook

共有3个答案

施琦
2023-03-14

只需用另一个反斜杠转义每个反斜杠:

openwinpath'\\60_Project\\6038_Project_Part\\05_development\\assets\\img\\facebook'

酆高翰
2023-03-14

问题是echo在打印字符串时试图解释字符串中的转义序列。一些版本的echo会这样做;有些只有在您传递-e选项时才会这样做;有些打印“-e”作为其输出的一部分;有些会……其他随机的事情。基本上,如果您给echo一些包含转义和/或以“-”开头的东西,就不知道它会做什么。

选项 1:请改用打印 f。这有点复杂,因为您必须为它提供格式字符串以及要打印的实际字符串,但它更具可预测性。哦,还有双引号变量引用:

function parsewinpath {
  printf '%s\n' "$1" | sed -e 's/\\/\//g'
}

选项2:正如@chepner所指出的,您可以跳过<code>echo</code>、<code>sed</code>和整个混乱,并使用参数扩展来完成工作:

function openwinpath {
  echo "Opening..."
  open "/Volumes/myvolume${1//\\//}"
}
双恩
2023-03-14

您根本不需要parsewinpath。只需使用参数扩展将反斜杠替换为正斜杠。

openwinpath /Volumes/myvolume${1//\\//}
 类似资料:
  • 问题内容: 我需要在路径字符串中替换为,但是以下代码失败。 有什么有用的建议吗? 问题答案: 使用函数filepath.ToSlash将操作系统路径分隔符替换为路径中的“ /”。 在Windows上,函数返回。在其他操作系统上,该函数按原样返回path参数。

  • 问题内容: 你被输出误导了-你所采用的第二种方法实际上可以实现你想要的,只是你不相信它. 顺便说一句,还有另一种字符串形式可能会更清晰一些: 问题答案: 你被输出误导了-你所采用的第二种方法实际上可以实现你想要的,只是你不相信它。 顺便说一句,还有另一种字符串形式可能会更清晰一些:

  • 我有一个shell脚本(我们称之为 ),它以下列形式输出数据,但不将其保存到文件中: 我想在外壳脚本中使用这些值作为环境变量。我目前正在使用以下shell代码执行此操作: 这非常有用,除非< code>=右边的值包含空格。例如: 我在<code>product.sh</code>中尝试了两种不同的方法: < li >用引号将值括起来(< code > FOO = " split value " )

  • 问题内容: 假设我有一个字符串,它是另一个字符串的反斜杠转义版本。在Python中,有没有一种简便的方法可以对字符串进行转义?例如,我可以这样做: 但是,这涉及将(可能不受信任的)字符串传递给eval(),这是安全隐患。标准库中是否有一个函数可以接收一个字符串并生成一个不涉及安全性的字符串? 问题答案:

  • 我想使用方法发送POST请求,但是我的JSON有一些国际字符,比如surunn。 不幸的是,我的WebAPI在从格式解码这个字符串时遇到了一些问题:。 使用时,我的API可以很好地处理非转义字符串和unicode转义字符串:。 我尝试了此操作,但在将转换为unicode后,转义了: 我有两个反斜杠字符串: 我试图用一个反斜杠替换两个反斜杠,但没有成功: 我该如何替换它们?

  • 问题内容: 假设我有一个字符串,它是另一个字符串的反斜杠转义版本。在Python中,有没有一种简便的方法可以对字符串进行转义?例如,我可以这样做: 但是,这涉及将(可能不受信任的)字符串传递给eval(),这是安全隐患。标准库中是否有一个函数可以接收一个字符串并生成一个不涉及安全性的字符串? 问题答案: