repo命令不会关心它得到什么样的引号。如果需要展开参数,请使用双引号。如果这意味着你最终不得不反斜杠很多东西,大部分使用单引号,然后在需要展开的部分使用双引号。
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
如果你感兴趣,下面是解释。
当您从shell运行命令时,该命令接收到的参数是一个以空结束的字符串数组。这些字符串可以包含任何非空字符。
但是当shell从命令行构建字符串数组时,它会特别解释一些字符;这是为了使命令更容易(实际上是可能的)输入。例如,空格通常表示数组中字符串之间的边界;因此,个别论点有时被称为“词”。但一个论证仍然可以有空格;你只需要一些方法告诉壳这是你想要的。
您可以在任何字符(包括空格或另一个反斜杠)前面使用反斜杠来告诉shell按字面意思处理该字符。但是你可以这样做:
reply=\”That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
...这会让人感到厌烦。因此shell提供了另一种选择:引号。这些主要有两种。
双引号被称为“分组引号”。它们防止展开通配符和别名,但主要用于在单词中包含空格。其他诸如参数和命令展开(由$表示的类型)之类的事情仍然会发生。当然,如果你想在双引号内加上双引号,你必须反斜杠:
reply="\"That'll be \$4.96, please,\" said the cashier"
单引号更为严厉。它们之间的所有内容都完全按照字面意思来理解,包括反斜杠。绝对没有办法在单引号中得到一个字面单引号。
幸运的是,shell中的引号不是单词分隔符;它们自己不会终止一个单词。你可以在同一个单词中使用引号,包括在不同类型的引号之间使用引号,从而得到想要的结果:
reply='"That'\''ll be $4.96, please," said the cashier'
这样就更简单了——反斜杠少了很多,尽管闭单引号、反斜杠-字面量-单引号、开单引号序列需要一些时间来适应。
Modern shells have added another quoting style not specified by the POSIX standard, in which the leading single quotation mark is prefixed with a dollar sign. Strings so quoted follow similar conventions to string literals in the ANSI standard version of the C programming language, and are therefore sometimes called "ANSI strings" and the $'...' pair "ANSI quotes". Within such strings, the above advice about backslashes being taken literally no longer applies. Instead, they become special again - not only can you include a literal single quotation mark or backslash by prepending a backslash to it, but the shell also expands the ANSI C character escapes (like \n for a newline, \t for tab, and \xHH for the character with hexadecimal code HH). Otherwise, however, they behave as single-quoted strings: no parameter or command substitution takes place:
reply=$'"That\'ll be $4.96, please," said the cashier'
需要注意的重要一点是,在所有这些示例中,存储在应答变量中的单个字符串是完全相同的。类似地,在shell解析完命令行之后,运行的命令无法确切地告诉每个参数字符串实际上是如何键入的——甚至无法知道它是否键入了,而不是以某种编程方式创建的。