该repo
命令不在乎它得到什么样的引号。如果需要参数扩展,请使用双引号。如果那意味着您不得不反斜杠很多内容,请对大多数内容使用单引号,然后将其括起来,并在需要扩展的部分加倍。
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
如果您感兴趣,请按照以下说明进行操作。
从外壳运行命令时,该命令作为参数接收的是一个以null终止的字符串数组。这些字符串可以绝对包含任何非空字符。
但是,当外壳程序通过命令行构建字符串数组时,它会特别解释某些字符。这是为了使命令更容易(实际上是可能的)输入。例如,空格通常表示数组中字符串之间的边界。因此,有时将各个参数称为“单词”。但是,论点中可能还有空格。您只需要一些方法告诉外壳程序就是您想要的。
您可以在任何字符(包括空格或其他反斜杠)前面使用反斜杠,以指示外壳按字面意义对待该字符。但是,尽管您可以执行以下操作:
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
...可能会很累。因此,外壳提供了另一种选择:引号。这些有两个主要品种。
双引号称为“分组引号”。它们防止通配符和别名被扩展,但是大多数情况下它们是为了在单词中包含空格。诸如参数和命令扩展之类的其他事情(由表示的事情$
)仍然发生。当然,如果要在双引号中使用文字双引号,则必须反斜杠:
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
单引号更加严格。它们之间的所有内容都完全按字面意义使用,包括反斜杠。绝对没有办法在单引号内获取文字单引号。
幸运的是,外壳中的引号不是单词分隔符;就他们自己而言,他们不会终止一个单词。您可以在同一个单词内输入和输出引号,包括不同类型的引号之间的引号,以获得所需的结果:
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完成命令行解析后,就无法运行命令来告诉引用的内容。即使它想要。
repo forall -c ' ...before... '"$variable"' ...after...'