这三条命令有什么区别?
echo `date`
echo "`date`"
echo '`date`'我搞不懂到底有什么区别。我认为,当‘在附近-它意味着它是一个字符串,因此回显将字面输出字符串date,而不是显示日期?
发布于 2013-11-01 06:00:54
date将只扩展到date命令的输出。但是,它在输出中有多个连续空格字符的地方删除额外的空格字符。(这是因为命令替换受分词的影响,也因为echo命令如何处理多个参数。)
在"date“中,双引号是弱引号,因此它们会展开变量(尝试"$PWD")并执行命令替换。展开的结果作为单个参数传递给echo命令,其中包含任何连续空格:即不执行单词拆分。
在'date‘中,单引号是更强的引号,因此它们不允许在其中展开变量或命令替换。
有关更多解释,请参阅此链接。
编辑了第一点,正如迈克尔·苏尔曼在下面的评论中正确指出的那样。
发布于 2013-11-01 06:49:32
两者都有
echo `date`和
echo "`date`"会显示日期。后者的输出本身类似于运行date的输出。
但是,有一个不同之处:"引号中包围的那个"将作为一个参数发送给echo。引号将整个命令的输出封装为一个参数。因为echo只是按顺序打印它的参数,中间有空格,所以它看起来基本上是一样的。
下面是一个细微差别的例子:
echo `date`生产:
Fri Nov 1 01:48:45 EST 2013但是:
echo "`date`"生产:
Fri Nov 1 01:48:49 EST 2013请注意,Nov之后的两个空格被缩减为没有引号的两个空格。这是因为shell解析每个空格分隔的元素,并将结果作为6个参数发送给echo。引用它时,echo收到一个参数,引号保留空格。
这在除echo之外的命令中变得更加重要。例如,假设一个命令foo需要两个参数:日期和电子邮件地址。
在这种情况下,这是可行的:
foo "`date`" joeuser@example.com但是,这将使脚本混淆,因为它发送了7个参数:
foo `date` joeuser@example.comhttps://unix.stackexchange.com/questions/98391
复制相似问题