Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从保留引号并扩展传入变量的shell脚本更新PHP配置文件_Bash_Sed_Sh - Fatal编程技术网

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

Bash 从保留引号并扩展传入变量的shell脚本更新PHP配置文件,bash,sed,sh,Bash,Sed,Sh,我试图从更新与配置文件关联的应用程序的shell脚本中更新PHP配置文件中出现的以下行: $config['version'] = "v2.7.0"; 当我运行shell脚本时,我传入要更新的版本号。shell脚本包含以下用于搜索和替换行的命令: sudo sed -i -e '$a$config['version'] = "v$1";' /var/www/app/application/config/production/config.php 运行该

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

$config['version'] = "v2.7.0";
当我运行shell脚本时,我传入要更新的版本号。shell脚本包含以下用于搜索和替换行的命令:

sudo sed -i -e '$a$config['version'] = "v$1";' /var/www/app/application/config/production/config.php
运行该命令将导致以下结果:

$config[version] = "v$1";
我尝试过各种转义引号的组合,但似乎没有任何效果。有人知道什么组合可以保持引号并扩展传入的变量吗?欢迎在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命令(不带转义):

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
                                        

是否可以使用
环境变量
?它更安全、更可靠。