使用 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
的内容将被销毁。