使用 Shell 变量替换

单引号'中的变量不会被 POSIX 兼容 shell 扩展,因此在 sed 替换中使用 shell 变量需要使用双引号 " 而不是单引号'

$ var="he"
$ echo "hello" | sed "s/$var/XX/"
XXllo

$ var="he"
$ echo "hello" | sed 's/$var/XX/'
hello

在评估变量时要小心命令注入:

$ var='./&/;x;w/etc/passwd
> x;s/he'
$ echo "hello" | sed "s/$var/XX/"
sed: /etc/passwd: Permission denied

如果上面以 root 身份运行,则输出将与第一个示例无法区分,并且/etc/passwd 的内容将被销毁。