从 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
我正在尝试从更新与配置文件关联的应用程序的 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