想写个 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 新手请教各位,这个问题是什么原因导致的?
1
araraloren 2018-07-13 15:29:46 +08:00
我这里就是原样输出,你用的是单引号,又不会发生什么变量内插,,
这里 "imageUri":"" 怎么是空的呢?? $curl2 呢。。 |
2
Narwhal OP @araraloren
我运行是这样的 <img src="https://i.loli.net/2018/07/13/5b48554faec72.png" class="embedded_image"> 因为是很长一串,运行下来发现最后一段出了问题,单独拎出来排查这个问题... 所以没写$curl2 的内容,正常$curl2 是个地址 |
3
Keller0 2018-07-13 15:40:14 +08:00
转义了单引号是那种结果。
|
4
araraloren 2018-07-13 15:47:13 +08:00 1
@Narwhal 总之 '' 单引号中是不会解释你的 $curl2 的,转义运行的是这样的
还有 注意的是 bash 中有很多特殊符号,':' 就是一个 参考: http://www.tldp.org/LDP/abs/html/special-chars.html |
5
wlsnx 2018-07-13 15:47:44 +08:00 1
为什么要把所有的引号都转意掉?
你可以试试 echo a{1,2,3}bc 会输出 a1bc a2bc a3bc 你试试这样写 echo \''{"requests":[{"features":[{"type":"DOCUMENT_TEXT_DETECTION"}],"image":{"source":{"imageUri":"'$curl2'"}}}]}'\' --compressed |
6
ant2017 2018-07-13 15:50:12 +08:00
\转义了
|
7
ant2017 2018-07-13 16:00:33 +08:00 1
由于\转义了单引号,所以{}就起了扩展作用
|
8
lululau 2018-07-13 16:01:20 +08:00
乱转义,还是把你的完整代码贴上来吧;至于为什么多了一部分,Brace Expansion:
echo a{b,c}d |
9
araraloren 2018-07-13 16:05:49 +08:00 1
如果你只想解释 $curl2 可以这么写
echo '{"requests":[{"features":[{"type":"DOCUMENT_TEXT_DETECTION"}],"image":{"source":{"imageUri":"'$curl2'"}}}]}' --compressed |
10
Narwhal OP 感谢楼上的各位耐心解答...原来是有 echo a{b,c}d 这样的用法的..学习了
|