Shell中使用sed命令插入变量时如何避免额外添加双引号
问题根因
你当前的sed命令拼接逻辑错误,在变量外额外增加了会被识别为插入内容的双引号,才会导致插入结果外层多了双引号;如果直接去掉所有引号,变量内部的空格会被shell识别为参数分隔符,sed会误将变量内容识别为文件路径,就会触发找不到文件的报错。
解决方案
调整引号拼接规则即可,仅保留shell层面用于避免变量分词的双引号,不要把双引号传递给sed作为插入内容的一部分,修改后的脚本如下:
#!/bin/bash var="test 'test:test:1.0'" # 写法1:用双引号包裹整个sed表达式,变量直接展开即可 sudo sed -i "/dependencies {/a $var" test.txt # 写法2:如果sed表达式内有大量shell元字符怕被误解析,用单引号拼接的版本 # sudo sed -i '/dependencies {/a '"$var" test.txt
修改后执行脚本,插入的内容就会是test 'test:test:1.0',不会携带外层多余双引号,也不会触发参数解析报错。
内容的提问来源于stack exchange,提问作者user2995458
相关产品推荐
相关产品推荐

