2015-10-14 55 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

相關問題