我试图用一个shell脚本中的$PEAR_ROOT
变量替换配置文件中{$pear_root}
的实例。简单的BASH字符串替换
使用从here方法“的注记关于猛砸转义字符”下,我有:
ESC_PEAR_ROOT="${PEAR_ROOT//\//\\/}"
sed -i "s/{\$pear_root}/${ESC_PEAR_ROOT}/"../.serverconfig/test.txt
我找回34:坏替代我认为这可能意味着这是不支持的。
这个问题似乎是使用s/find/replace/
,因为我得到的错误是sed
或perl
。
什么是做到这一点的最简单的方法:
APP_ROOT=$(php ./scripts/get_realpath.php '../')
PEAR_ROOT="$APP_ROOT/pear"
ESC_PEAR_ROOT="${PEAR_ROOT//\//\\/}"
sed -e "s/{\$pear_root}/${ESC_PEAR_ROOT}/"../.serverconfig/test.txt
并与由PEAR_ROOT
路径替换的test.txt
{$pear_root}
所有情况下结束了?
我不重视这种方法 - 任何可靠的事情都会做。
什么是你想设置ESC_PEAR_ROOT来代替PEAR_ROOT?你能给个例子吗? – 2012-02-08 22:35:16
您还没有在表达式的第二部分中跳过$ - 是否会改变这些内容? – John3136 2012-02-08 22:37:11
@evil otto:我认为ESC_PEAR_ROOT最终会以\ /之前的每一个斜杠结尾。我需要这一条语句,但我还需要原始的PEAR_ROOT以备后用。所以如果我逃脱PEAR_ROOT,我将无法在稍后使用它作为路径。 – Eli 2012-02-08 22:43:45