use*_*619 13 shell sed shell-script quoting variable-substitution
我不能不sed在$NUMBER表单中使用 shell 变量。我的 shell 脚本中有这一行:
cat shared.txt sed 's/whatever1/$2 ... whatever2/' > shared2.txt
Run Code Online (Sandbox Code Playgroud)
结果shared2.txt如下:
...$2....
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
cuo*_*glm 21
尝试使用双引号而不是单引号:
sed "s/whatever1/$2 ... whatever2/" shared.txt > shared2.txt
Run Code Online (Sandbox Code Playgroud)
小智 5
虽然使用双引号有效,但在某些情况下这不会给出您想要的。例如,
t="bcd"
echo '123$tbcd' | sed "s/$t$t//"
Run Code Online (Sandbox Code Playgroud)
(是的,这有点做作!)。您可以通过转义某些字符来避免这种情况:
echo '123$tbcd' | sed "s/\$t$t//"
Run Code Online (Sandbox Code Playgroud)
但很容易错过这一点。在我看来,最安全的方法是用双引号将变量括起来(这样空格不会阻止 sed 命令)并用单引号将字符串的其余部分括起来(以避免转义某些字符的必要性):
echo '123$tbcd' | sed 's/$t'"$t"'//'.
Run Code Online (Sandbox Code Playgroud)