我需要使用以下 sed 命令(运行良好)来修改文件的内容:
sed -i '[email protected].*@'"date.timezone = $TZ"'@' $PHP_INI_DIR/conf.d/symfony.ini
此行应该在脚本中注入exec
:
#!/bin/sh
set -e
exec "$@"
所以我需要另一个 sed 来表示“之前替换exec
”:
sed '/exec/i \sed -i '[email protected].*@'"date.timezone = $TZ"'@' $PHP_INI_DIR/conf.d/symfony.ini\n' docker-php-entrypoint
问题是引文不是输出:
#!/bin/sh
set -e
sed -i [email protected].*@"date.timezone = $TZ"@ $PHP_INI_DIR/conf.d/symfony.ini
exec
\
在前面加反斜杠没有任何作用。有什么建议吗?'[email protected]
答案1
这是 shell 问题。shell 会“删除引号”,因此您需要研究引号在 shell 中的行为方式。单引号不能嵌套或转义。您必须结束单引号字符串才能插入单引号。
sed '/exec/i \sed -i '\''[email protected].*@'\''"date.timezone = $TZ"'\''@'\'' $PHP_INI_DIR/conf.d/symfony.ini\n'
答案2
您可以在单引号内使用双引号,反之亦然,以转义引号:
sed '/exec/i \sed -i '"'"'[email protected].*@"date.timezone = $TZ"@' $PHP_INI_DIR/conf.d/symfony.ini\n'"'"' docker-php-entrypoint
这样,单引号在单引号内进行转义,双引号在转义的单引号内使用。