首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >echo ` `date`‘、echo '`date`’和echo‘`date`’之间有什么区别?

echo ` `date`‘、echo '`date`’和echo‘`date`’之间有什么区别?
EN

Unix & Linux用户
提问于 2013-11-01 05:33:23
回答 2查看 153.7K关注 0票数 31

这三条命令有什么区别?

代码语言:javascript
复制
echo `date`
echo "`date`"
echo '`date`'

我搞不懂到底有什么区别。我认为,当‘在附近-它意味着它是一个字符串,因此回显将字面输出字符串date,而不是显示日期?

EN

回答 2

Unix & Linux用户

发布于 2013-11-01 06:00:54

date将只扩展到date命令的输出。但是,它在输出中有多个连续空格字符的地方删除额外的空格字符。(这是因为命令替换受分词的影响,也因为echo命令如何处理多个参数。)

在"date“中,双引号是弱引号,因此它们会展开变量(尝试"$PWD")并执行命令替换。展开的结果作为单个参数传递给echo命令,其中包含任何连续空格:即不执行单词拆分。

在'date‘中,单引号是更强的引号,因此它们不允许在其中展开变量或命令替换。

有关更多解释,请参阅此链接

编辑了第一点,正如迈克尔·苏尔曼在下面的评论中正确指出的那样。

票数 28
EN

Unix & Linux用户

发布于 2013-11-01 06:49:32

两者都有

代码语言:javascript
复制
echo `date`

代码语言:javascript
复制
echo "`date`"

会显示日期。后者的输出本身类似于运行date的输出。

但是,有一个不同之处:"引号中包围的那个"将作为一个参数发送给echo。引号将整个命令的输出封装为一个参数。因为echo只是按顺序打印它的参数,中间有空格,所以它看起来基本上是一样的。

下面是一个细微差别的例子:

代码语言:javascript
复制
echo `date`

生产:

代码语言:javascript
复制
Fri Nov 1 01:48:45 EST 2013

但是:

代码语言:javascript
复制
echo "`date`"

生产:

代码语言:javascript
复制
Fri Nov  1 01:48:49 EST 2013

请注意,Nov之后的两个空格被缩减为没有引号的两个空格。这是因为shell解析每个空格分隔的元素,并将结果作为6个参数发送给echo。引用它时,echo收到一个参数,引号保留空格。

这在除echo之外的命令中变得更加重要。例如,假设一个命令foo需要两个参数:日期和电子邮件地址。

在这种情况下,这是可行的:

代码语言:javascript
复制
foo "`date`" joeuser@example.com

但是,这将使脚本混淆,因为它发送了7个参数:

代码语言:javascript
复制
foo `date` joeuser@example.com
票数 20
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/98391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档