2015-10-14 34 views
-1

有人有更好的经验,那么我可以看看这段代码,并解释为什么没有字符串替换是发生。如果我在终端运行相同的命令(文本输入,而不是变量),那么它的工作原理。

#!/bin/bash 

echo "important to escape every \"/\" character" 

read -p "Specify the old string you want to replace? (from) " FROM 
read -p "Specify the new string you want to use instead? (to) " TO 

cp ../backup/mysql/dump.sql ../backup/mysql/dump.sql.backup.$(date +"%Y-%m-%d-%H-%M-%S") \ 
    && sed -i 's/$FROM/$TO/g' ../backup/mysql/dump.sql 
+3

对变量扩展使用双引号,即'sed -i“s/$ FROM/$ TO/g”' – anubhava

+1

谢谢@anubhava – superhero

回答

3

使用变量扩展双引号代替单引号:"s/$FROM/$TO/g"

1

你甚至可以有cp隐含使用-i(inplace)选项sed命令本身。

sed -i.backup.$(date +"%Y-%m-%d-%H-%M-%S") "s/$FROM/$TO/g" ../backup/mysql/dump.sql 

这也会创建备份文件。

+0

感谢您的注意:) – superhero