Bash 从保留引号并扩展传入变量的shell脚本更新PHP配置文件
我试图从更新与配置文件关联的应用程序的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 运行该
$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
是否可以使用
环境变量
?它更安全、更可靠。