[EDIT]已解决。实际问题是处理程序变量中的一个错字,而不是我最初认为的zsh问题。
我试图阻止zsh替换代码"%5D
";对于]右方括号加上实际字符"]
"。
对于我的目的-调用最后一个。通过curl在shell脚本中的fm API,从Apple Music获得有关曲目的信息-它需要保持为"%5D
",因为否则API不能识别它。我已尝试转义"%5D"用反斜杠或第二个"%"但是这不起作用,它仍然会被替换为"]">
这里有一个例子,我正在尝试做什么,什么不工作:
歌曲名称的原始字符串:昨天(扩展版)[Bonus Track]
">
如何拼写才能使API工作:"昨天+(扩展+版本)+%5BBonus+Track%5D
">
空格被替换为"+"通过我的AppleScript处理程序。左[
保持为"%5B"(我猜是因为它后面紧跟着更多的字母,因此zsh不能识别它作为代码并替换它)。右边的]
通常是音轨字符串的最后一个字符,后面没有任何字符,因此"%5D"被ZSH认可并写为";.
如何解决这个问题?任何帮助都是非常感激的:)
供参考:AppleScript中用来替换"[]"与代码。(这显然不是完整的脚本)。如果运行此命令,它将正确地替换[]。这个问题只有在使用do shell script curl_command
进行整个API调用时才会出现,因为zsh会解释代码。
set trackreplace to "YESTODAY (Extended Version) [Bonus Track]"
if trackreplace contains "[" then
set trackreplace to replaceChars("[", "%5B", trackreplace)
end if
if trackreplace contains "]" then
set trackeplace to replaceChars("]", "%5D", trackreplace)
end if
on replaceChars(find, replace, subject)
set savedelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to find
set subject to text items of subject
set AppleScript's text item delimiters to replace
set subject to (subject as string)
set AppleScript's text item delimiters to savedelims
return subject
end replaceChars
这是不是zsh问题但实际上只是一个处理程序变量的错字(trackeplace
而不是trackreplace
),正如@GordonDavisson所指出的那样