问一个 shell 的问题 echo 相关

2018-07-13 15:16:47 +08:00
 Narwhal

想写个 shell 脚本去调用 google 家的 OCR 服务,在调试的过程遇到这样一个奇怪的问题

[root@ccc]# echo '{"requests":[{"features":[{"type":"DOCUMENT_TEXT_DETECTION"}],"image":{"source":{"imageUri":"$curl2"}}}]}' --compressed

'{"requests":["features":[{"type":"DOCUMENT_TEXT_DETECTION"}]]}' '{"requests":["image":{"source":{"imageUri":""}}]}' --compressed

输出比输入多跑出了这么一段“ ]}' '{"requests": ”

不记得在什么情况下 echo 命令会自动生成这么一段...找了个在线编辑 shell 的,运行也是这样的结果。 谷歌查了下没找到原因,linux 新手请教各位,这个问题是什么原因导致的?

1985 次点击
所在节点    程序员
10 条回复
araraloren
2018-07-13 15:29:46 +08:00
我这里就是原样输出,你用的是单引号,又不会发生什么变量内插,,
这里 "imageUri":"" 怎么是空的呢?? $curl2 呢。。
Narwhal
2018-07-13 15:34:15 +08:00
@araraloren
我运行是这样的
<img src="https://i.loli.net/2018/07/13/5b48554faec72.png" class="embedded_image">
因为是很长一串,运行下来发现最后一段出了问题,单独拎出来排查这个问题...
所以没写$curl2 的内容,正常$curl2 是个地址
Keller0
2018-07-13 15:40:14 +08:00
转义了单引号是那种结果。
araraloren
2018-07-13 15:47:13 +08:00
@Narwhal 总之 '' 单引号中是不会解释你的 $curl2 的,转义运行的是这样的
还有 注意的是 bash 中有很多特殊符号,':' 就是一个

参考: http://www.tldp.org/LDP/abs/html/special-chars.html
wlsnx
2018-07-13 15:47:44 +08:00
为什么要把所有的引号都转意掉?
你可以试试 echo a{1,2,3}bc
会输出 a1bc a2bc a3bc
你试试这样写 echo \''{"requests":[{"features":[{"type":"DOCUMENT_TEXT_DETECTION"}],"image":{"source":{"imageUri":"'$curl2'"}}}]}'\' --compressed
ant2017
2018-07-13 15:50:12 +08:00
\转义了
ant2017
2018-07-13 16:00:33 +08:00
由于\转义了单引号,所以{}就起了扩展作用
lululau
2018-07-13 16:01:20 +08:00
乱转义,还是把你的完整代码贴上来吧;至于为什么多了一部分,Brace Expansion:

echo a{b,c}d
araraloren
2018-07-13 16:05:49 +08:00
如果你只想解释 $curl2 可以这么写

echo '{"requests":[{"features":[{"type":"DOCUMENT_TEXT_DETECTION"}],"image":{"source":{"imageUri":"'$curl2'"}}}]}' --compressed
Narwhal
2018-07-13 16:08:14 +08:00
感谢楼上的各位耐心解答...原来是有 echo a{b,c}d 这样的用法的..学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/470608

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX