两种方法, 一,单引号改为双引号sed -i "s/$1/$2/g" 1.txt 二,把shell变量$1和$2拿到单引号外面来sed -i 's/'$1'/'$2'/g' 1.txt 原因其实就是单引号会消除$取值符号的特殊含义,$只会被解析为字符本身。