这个repo命令不关心它得到什么样的引号。如果需要参数展开,请使用双引号。如果这意味着你最终不得不反斜杠很多东西,使用单引号的大部分,然后打破它们,进入双倍的部分,你需要扩展发生。repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
如果你感兴趣的话,解释如下。
当从shell运行命令时,该命令作为参数接收的是一个以空结尾的字符串数组。这些字符串可能绝对包含任何非空字符
但是,当shell从命令行构建字符串数组时,它专门解释一些字符;这是为了使命令更容易(实际上是可能)输入。例如,空格通常表示数组中字符串之间的边界;因此,个别参数有时被称为“word”。但是,尽管如此,争论中还是有空格的;你只需要用某种方式告诉shell,这就是你想要的。
您可以在任何字符(包括空格或另一个反斜杠)前面使用反斜杠告诉shell按字面处理该字符。但是当你可以这样做的时候:
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
.这会让人厌烦的.因此shell提供了另一种选择:引号。这些主要有两种。
双引号称为“分组引号”。它们防止通配符和别名被扩展,但它们主要是为了在一个单词中包含空格。其他事情,如参数和命令展开(由$)仍在发生。当然,如果你想要双引号内的文字双引号,你必须反斜杠:
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
单引号更严格。他们之间的一切都是完全从字面上看的,包括反斜杠。在单引号中绝对没有得到文字单引号的方法。
幸运的是,shell中有引号。不是字分隔符就他们自己而言,他们不会终止一个词。您可以在同一个单词内进出引号,包括不同类型的引号,以获得所需的结果:
echo '"Thank you. That'\''ll be $4.96, please," said the cashier'
所以这更容易-反斜杠要少得多,尽管关闭单引号、反斜杠-文字单引号、开放单引号序列需要一些习惯。
现代shell增加了另一种引用方式,POSIX标准没有指定,其中领先的单引号以美元符号作为前缀。引用的字符串与ANSI C编程语言中的字符串文本类似,因此有时被称为“ANSI字符串”和$'...'一对“ANSI引号”。在这些字符串中,关于反斜杠的建议不再适用。相反,它们又变得特别了-不仅可以通过将反斜杠加上反斜杠来包含文字单引号或反斜杠,而且shell还可以扩展ANSI C字符转义(如\n换一条新线路,\t用于制表,以及\xHH用于十六进制代码的字符。HH)。但是,否则,它们表现为单引号字符串:不发生参数或命令替换:echo $'"Thank you. That\'ll be $4.96, please," said the cashier'
重要的是要注意的是,接收到的单个字符串作为echo命令是完全一样在所有这些例子中。在shell解析命令行之后,无法运行命令来说明引用了什么。即使它想。