描述linux shell中单引号,Bash命令中单引号中变量的扩展

这个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解析命令行之后,无法运行命令来说明引用了什么。即使它想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值