我正在尝试设置.sh脚本,该脚本将发送包含变量的POST命令。
我用双引号将引号引起来,并尝试在变量周围使用双引号和单引号的不同组合。我还尝试将整个字符串分成三个变量并进行串联,但它们均不能正常工作(服务器给出错误或应有的情况下什么也没有发生)
我主要从邮递员那里获得的代码
playlist="Ambient.m3u"
curl -X POST "http://192.168.1.96:32400/playlists/upload?sectionID=11&path=D:\Media\Plex%20Playlists\${playlist}&X-Plex-Token={REMOVED}" -H 'Postman-Token: {REMOVED}' -H 'cache-control: no-cache'
当我替换
${playlist}
使用
Ambient.m3u
该命令有效(Plex添加了播放列表),但是我无法使其与变量一起使用。
答案 0 :(得分:1)
反斜杠将转义您的“双引号”中的$。为了传递反斜杠,您可以使用反斜杠转义反斜杠(当然!)。
您的命令将变为:
playlist="Ambient.m3u"
curl -X POST "http://192.168.1.96:32400/playlists/upload?sectionID=11&path=D:\\Media\\Plex%20Playlists\\${playlist}&X-Plex-Token={REMOVED}" -H 'Postman-Token: {REMOVED}' -H 'cache-control: no-cache'
事实证明,bash似乎足够聪明,无法逃脱路径中的字母。也就是说,“ \ M”与“ \ M”相同(尝试:echo“ \ M”与echo“ \ M”)。因此,最好不要将所有\放在其中,但是您肯定需要在$前面加上\以避免逃逸$。这解释了为什么在为文件名输入常量时表达式可以工作的原因:
这有效(您只需要在$前面转义\):
curl -X POST "http://192.168.1.96:32400/playlists/upload?sectionID=11&path=D:\Media\Plex%20Playlists\\${playlist}&X-Plex-Token={REMOVED}" -H 'Postman-Token: {REMOVED}' -H 'cache-control: no-cache'