V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Narwhal
V2EX  ›  程序员

问一个 shell 的问题 echo 相关

  •  
  •   Narwhal · 2018-07-13 15:16:47 +08:00 · 2139 次点击
    这是一个创建于 2326 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想写个 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 新手请教各位,这个问题是什么原因导致的?

    10 条回复    2018-07-13 16:08:14 +08:00
    araraloren
        1
    araraloren  
       2018-07-13 15:29:46 +08:00
    我这里就是原样输出,你用的是单引号,又不会发生什么变量内插,,
    这里 "imageUri":"" 怎么是空的呢?? $curl2 呢。。
    Narwhal
        2
    Narwhal  
    OP
       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
        3
    Keller0  
       2018-07-13 15:40:14 +08:00
    转义了单引号是那种结果。
    araraloren
        4
    araraloren  
       2018-07-13 15:47:13 +08:00   ❤️ 1
    @Narwhal 总之 '' 单引号中是不会解释你的 $curl2 的,转义运行的是这样的
    还有 注意的是 bash 中有很多特殊符号,':' 就是一个

    参考: http://www.tldp.org/LDP/abs/html/special-chars.html
    wlsnx
        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
    ant2017
        6
    ant2017  
       2018-07-13 15:50:12 +08:00
    \转义了
    ant2017
        7
    ant2017  
       2018-07-13 16:00:33 +08:00   ❤️ 1
    由于\转义了单引号,所以{}就起了扩展作用
    lululau
        8
    lululau  
       2018-07-13 16:01:20 +08:00
    乱转义,还是把你的完整代码贴上来吧;至于为什么多了一部分,Brace Expansion:

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

    echo '{"requests":[{"features":[{"type":"DOCUMENT_TEXT_DETECTION"}],"image":{"source":{"imageUri":"'$curl2'"}}}]}' --compressed
    Narwhal
        10
    Narwhal  
    OP
       2018-07-13 16:08:14 +08:00
    感谢楼上的各位耐心解答...原来是有 echo a{b,c}d 这样的用法的..学习了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1176 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:03 · PVG 02:03 · LAX 10:03 · JFK 13:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.