如何用Bash变量替换文件中的字符串?sed命令执行异常
Bash变量替换文件字符串的正确方法
问题出在单引号的特性:Bash中,单引号会完全保留里面的所有字符,不会解析变量(比如$i),所以你的两条命令里的$i都被当成了普通字符串输出。
解决方法有两种:
- 使用双引号包裹sed的替换表达式,这样Bash会先解析变量再传给sed:
i="1" sed -i "s/%q/0$i/g" file
执行后,$i会被替换为它的值1,最终文件里的%q会变成01。
- 如果需要保留部分单引号的场景,可以用单引号拼接变量:
i="1" sed -i 's/%q/0'"$i"'/g' file
这里把替换字符串拆成三部分:'s/%q/0'(单引号包裹的固定部分)、"$i"(双引号包裹的变量,会被解析)、'/g'(单引号包裹的固定部分),拼接后同样能正确替换。
内容的提问来源于stack exchange,提问作者Elena Greg
相关产品推荐
相关产品推荐

