使用 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
的內容將被銷燬。