美文网首页
bash shell传递包含斜杠的变量到sed

bash shell传递包含斜杠的变量到sed

作者: CyanStone | 来源:发表于2019-04-19 11:31 被阅读0次

    遇到如下代码,ci集成接入matrix-apk-canary的时候,需要把配置文件的相对路径变成绝对路径,写如下代码:

    #!/bin/bash
    WORKSPACE="/Users/shipeiqing/StudioProjects/aweme"
    sed -i '' "s/tools\/matrix\/mntool\/arm-linux-androideabi-nm/$WORKSPACE\/tools\/matrix\/mntool\/arm-linux-androideabi-nm~g" app/build/outputs/matrix/matrix_apk_checker_config.json
    

    运行时会报出如下错误:

    sed: 1: "s/tools\/matrix\/mntool ...": bad flag in substitute command: 'U'
    

    这个错误的原因就是在于传递的变量里包含里斜杠,而没有对它做转义处理。
    解决这个问题对思路有两个:

      1. 传递变量对时候就做转义,把变量变成以下可以通过:
    WORKSPACE="\/Users\/shipeiqing\/StudioProjects\/aweme"
    
    • 2 使用~来替代sed工具对分隔符:
    sed~$var~replace_string~g
    

    改成如下后,执行通过:

    #!/bin/bash
    WORKSPACE="/Users/shipeiqing/StudioProjects/aweme"
    sed -i '' "s~tools/matrix/mntool/arm-linux-androideabi-nm~$WORKSPACE/tools/matrix/mntool/arm-linux-androideabi-nm~g" app/build/outputs/matrix/matrix_apk_checker_config.json
    

    相关文章

      网友评论

          本文标题:bash shell传递包含斜杠的变量到sed

          本文链接:https://www.haomeiwen.com/subject/mvcqgqtx.html