【问题标题】:bash eval "echo 'string' >> file" statement with literal quotes带有文字引号的 bash eval "echo 'string' >> file" 语句
【发布时间】:2013-12-26 18:58:21
【问题描述】:

我是 shell 脚本的新手。我已经开始大量使用 SASS 和 git 终端,并且想要一个简单的脚本来轻松创建快捷方式。

function ma {
    cmd="echo alias $1='$2' >> ~/.bash_profile";
    cmd=${cmd/'$pwd'/$(pwd)};
    eval $cmd;
    echo $cmd;
}

问题是单引号没有写入 .bash_profile。

在示例ma mycd '$pwd' 中,回显的版本是正确的:

echo alias mycd='cd /current/working/directory' >> ~/.bash_profile

但这是写入文件的:

alias mycd=cd /current/working/directory

我已经尝试了大约 50 种排列方式,试图在字符串或 eval 语句中获得单引号和双引号以及转义引号的正确组合。我怎样才能让eval 保留那些单引号,或者我应该使用什么来代替?谢谢!

【问题讨论】:

  • 因为我觉得这很有用,我想我会分享我的更新版本,它会重新加载配置文件,以便新别名可以立即使用:function ma { cmd="echo \"alias $1='$2'\" >> ~/.bash_profile"; cmd=${cmd/'$pwd'/$(pwd)}; eval $cmd; echo $cmd; source ~/.bash_profile; echo 'Ready to go'; }

标签: bash shell eval quotes


【解决方案1】:

尝试以下方法:

 cmd="echo \"alias $1='$2'\" >> ~/.bash_profile";

【讨论】:

  • 是的!哈,我自己终于试过了。 :) 所以说我不能接受答案,但我会回来再试一次。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2015-12-13
  • 2015-01-16
相关资源
最近更新 更多