2013-07-13 25 views
0

我想追加alias foo='bar'直接在命令行中我的bash配置文件的末尾,我知道有两种方法可以做到这一点 - 逃逸的单引号用反斜杠,或者在双引号包围的命令,即:在bash中转义单引号的推荐方法 - 双引号,反斜杠或其他内容?

  1. echo alias foo=\'bar\' >> ~/.bash_profile
  2. echo "alias foo='bar'" >> ~/.bash_profile

是一个方法,认为 “安全” 的比其他?两者都按预期工作,但我想知道的是,如果其中一种方法在以其他方式使用时导致意外行为的可能性较低,或者有其他推荐的方式转义单引号(在此特定上下文中)是最不容易出错的。

+0

你是什么意思的“当以其他方式使用” – armando

+0

@armando我基本上是查询最佳实践,因为这两种方法在外面看起来同样有效,但可能有其他事情发生在引擎盖下,只会变得明显在不同的情况下,我没有考虑到(例如多行字符串)。例如,如果有某种情况,我没有考虑使用反斜杠进行转义比使用双引号括起来更好/更差,因为这会导致意想不到的结果,例如,外壳扩展。 – 3cheesewheel

回答

2

你的两个命令是稍有不同,在于echo alias foo=\'bar\'传递两个参数来echo(即aliasfoo='bar'),而echo "alias foo='bar'"仅通过一个(即alias foo='bar')。由于echo会打印所有由空格分隔的参数,因此这与您的情况相同,但在一般情况下值得记住。

但是那时你已经张贴实际的命令,你的单引号不总需要—命令alias foo='bar'等同于命令alias foo=bar —所以正常的方式来写它:

echo 'alias foo=bar' >> ~/.bash_profile 

在更一般的情况,其中bar可以是任何命令,我还是换单引号整个事情,以确保没有遗漏任何扩展或字分裂发生,例如写:

echo 'alias foo='\''command with * and ? and spaces'\' >> ~/.bash_profile 

(而你的第一个版本,适用于这样一个命令,会变得非常糟糕;你的第二个版本可以很好地处理这种情况,但是如果参数扩展或命令中的别名不是别名,它仍然会中断)。

0

这可能导致困难的情况是,如果你试着写 你到一个文件中提及的行:

file.txt << ! 
echo alias foo=\'bar\' >> ~/.bash_profile 
echo "alias foo='bar'" >> ~/.bash_profile 
! 

您可以检查file.txt的,看看输出是你所期望的。

相关问题