0

我想alias foo='bar'直接在命令行中附加到我的 bash 配置文件的末尾,我知道有两种方法可以做到这一点 - 用反斜杠转义单引号,或者用双引号将命令括起来,即:

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

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

4

2 回答 2

2

您的两个命令略有不同,因为echo alias foo=\'bar\'将两个参数传递给echo(即aliasand foo='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

(而您的第一个版本应用于这样的命令会表现得非常糟糕;您的第二个版本可以很好地处理这种情况,但如果命令中存在参数扩展或其他类似的别名,它仍然会中断)。

于 2013-07-13T17:47:08.493 回答
0

可能导致困难的情况是,如果您尝试将提到的行写入文件:

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

您可以检查 file.txt 以查看输出是否符合您的预期。

于 2013-07-13T17:51:41.780 回答