为什么在终端执行时输出的是_$ _?

为什么在终端执行时输出的是_$ _?

我已经执行了以下命令序列:

$ now=$(date)
$ echo _$now_
_
$ echo _ $now _
_ Mon Sep 22 09:53:44 IST 2014 _

_$now_为什么只有 的输出_

答案1

man bash

DEFINITIONS
       The following definitions are used throughout the rest of this document.
       blank  A space or tab.
       word   A sequence of characters considered as a single unit by the shell.
              Also known as a token.
       name   A word consisting only of alphanumeric characters and underscores, 
              and beginning with an alphabetic character or an underscore.  Also 
              referred to as an identifier.
...
PARAMETERS
       A parameter is an entity that stores values.  It can be a name, a number, 
       or one of the special characters listed below under Special Parameters.  
       A variable is a parameter denoted by a name.

变量只能包含字母、数字和下划线。因此,now_变量名是有效的,并按此进行解释。

您可以用不同的方式来界定变量名称:

_"$now"_
_${now}_
_$now"_"
_$now'_'

或者以上任意组合。

答案2

因为_是变量名的一部分echo _$now_

改用echo \_$now\_

您也可以在线性命令中使用它:echo _$(date)_

答案3

请稍等片刻,这需要一点解释。

首先,为什么输出是_ $(date) __ Mon Sep 22 03:30:34 MDT 2014 _因为这实际上是告诉 echo 先输出 _ ,然后输出 $(date) ,然后输出 _ 。空格分隔 echo 的变量。

现在尝试echo _$(date),注意_和之间没有空格$(date)。在这种情况下,输出将是_Mon Sep 22 03:32:40 MDT 2014。这有什么用?你告诉echo将下划线与 的输出连接起来$(date)

尝试使用 进行同样的操作_$PWD,它将使用下划线连接您的工作目录。现在尝试echo $PWD_。输出将为空白。为什么?因为PWD_是不存在的环境变量,并且正如其他人提到的那样_是环境变量的有效字符,例如$XDG_CURRENT_DESKTOP

那么为什么_$PWD_要给出_?因为你告诉echo_与不存在的环境变量的输出连接。所以_打印了,但$PWD_输出是空白的,所以你实际上看到的是_与那个空白输出连接的。

答案4

_$now_ 

被解释为

_${now_}

在你的情况下,这显然是 '_' 和 '' 的字符串连接。因此使用

_${now}_

相反,它读起来更加清晰。

相关内容