bash shell传递包含斜杠的变量到sed
2019-04-19 本文已影响0人
CyanStone
遇到如下代码,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'
这个错误的原因就是在于传递的变量里包含里斜杠,而没有对它做转义处理。
解决这个问题对思路有两个:
- 传递变量对时候就做转义,把变量变成以下可以通过:
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