从 shell 脚本更新 PHP 配置文件,保留引号并扩展传入的变量

Updating a PHP config file from a shell script keeping quotes and expanding a passed in variable

我正在尝试从更新与配置文件关联的应用程序的 shell 脚本更新出现在 PHP 配置文件中的以下行:

$config['version'] = "v2.7.0";

当我 运行 我的 shell 脚本时,我传入要更新的版本号。 shell 脚本包括以下用于搜索和替换行的命令:

sudo sed -i -e '$a$config['version'] = "v";' /var/www/app/application/config/production/config.php

运行 结果如下:

$config[version] = "v";

我已经尝试了各种转义引号组合,但似乎没有任何效果。有谁知道什么组合可以保留引号并扩展传入的变量?欢迎在 shell 脚本中使用的替代方法!

vers="2.7.0"
sed -i "$a$config['version'] = \"v$vers\";" configfile

使用双引号而不是单引号并转义双引号和 $

假设要更改的值的形式为

$config[version] = "v1.0.0";

你想得到

$config[version] = "v2.7.0"; # where v1="v2.7.0"

您可以使用类似于此的 sed 命令(w/o 转义):

sed -i -e '$a$config['version'] = "'"$v1"'";' /path/to/file
sed -i -e '$a$config['version'] = "'$v1'";' /path/to/file

前者在 v1 包含空格时不会中断。

解释:

    sed -i -e '$a$config['version'] = "'"$v1"'";'
                                      ^^^   ^^^ |-- terminates sed command
   places a literal double quote -----|||___|||-- places a literal dbl quote
                                       |  |  |-- returns sed command
           leaves sed's single         |  |  
             quotation command---------|  |---- variable enclosed
                                                in double quotes