防止在具有多个引号级别的脚本中转义shell

时间:2015-03-08 04:01:08

标签: linux bash shell

我想在运行的安装脚本中将以下行附加到我的.zshrc文件的末尾:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

.zshrc文件只能由root进行只读访问,我是另一个用户(但是有sudo访问权限)。

一种方法与以下类似:

sudo bash -c "echo 'export PATH=\"$HOME/.rbenv/bin:$PATH\"' >> ~/.zshrc"

主要问题是$ HOME和$ PATH字段以及$()部分在被解释后的值替换后插入。我可以在外面放一个单引号,但我需要使用双引号,其中第一个单引号当前,然后解释内部。

如果没有在插入之前解释变量/命令,我会很感激如何做到这一点。 heredoc是一种更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

\放在$之前:

,以逃避变量扩展
sudo bash -c "echo 'export PATH=\"\$HOME/.rbenv/bin:\$PATH\"' >> ~/.zshrc"

答案 1 :(得分:0)

只需使用正确的引号即可。并且不要害怕在它们之间切换。

sudo bash -c "echo 'export "'PATH="$HOME/.rbenv/bin:$PATH"'"'" >> ~/.zshrc"