这个语法是什么意思?


16

我是终端机的新手,正在尝试学习如何使用它。

这些行是做什么的?以及它们如何工作?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"

7
$ man date && man echo在壳。
code_dredd

Answers:


76
$ type echo
echo is a shell builtin

意思是,该echo命令是bash程序本身的一部分(假设您使用bash)

-n 是一个选项,让我们看看它的作用

$ help echo
Write arguments to the standard output
...
-n  do not append a newline

因此,当我们运行该行时:

zanna@monster:~$ echo -n "Today's date is: "
Today's date is: zanna@monster:~$ 

嗯,看起来不太好,因为在打印的文本之后没有换行符。我们将回到这一点。

$ type date
date is /bin/date

嗯,所以 date命令是一个单独的程序。它有什么作用?

$ man date
Display the current time in the given FORMAT, or set the system date.

date命令后面的字符是格式选项(必须在之前+)-指定日期的不同部分(例如,%A是星期几的全名-参见其余部分)man date有关选项的完整列表,)

$ date +"%A, %B %-d, %Y"
Tuesday, February 7, 2017

因此,如果我们将命令放到脚本中,然后运行脚本,我们将获得

Today's date is: Tuesday, February 7, 2017

真好!如果要在终端中获得相同的效果,则可以使用分号来分隔两个命令,而不是换行符:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017

21
这是高级的RTFM答案,+ 1
YSC

1
我会说这是缺少什么的加号解释之前的说法是
DélissonJUNIO

@DélissonJunio编辑过,但是Melebius的答案用直接的手册页引号更好地显示了它
Zanna

@Zanna我不是OP,但是引起我注意的事实是加号看起来很奇怪,因为我认为bash会将引号之间的所有内容都解释为一个参数,而不包括加号。但我想这是另外一个问题
DélissonJUNIO

2
您实际上也可以将加号放在引号中。Bash具有引号和相邻文本一起运行的奇特方式,例如cd“ $ x” / output甚至cd nospace /“ with space” / nospace
StarWeaver

10

您应该从手册页开始,即命令man。只需键入man <command>以获取有关的信息<command>。导航man不是很直观,但是有很多指南,例如https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages

的相关部分man echoman date

回声

echo [SHORT-OPTION]... [STRING]...

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

因此,它将打印字符串,并且此后不会移至新行(这是默认行为),因此,下一条命令的输出将打印在回显字符串的右侧。

日期

date [OPTION]... [+FORMAT]

FORMAT controls the output.  Interpreted sequences are:

%A     locale's full weekday name (e.g., Sunday)

%B     locale's full month name (e.g., January)

%d     day of month (e.g., 01)

%Y     year

By default, date pads numeric fields with zeroes.  The following optional flags may follow '%':

-      (hyphen) do not pad the field

我希望这很清楚。随意问是否。


非常感谢。我还有一个问题:是否已经有一个内置功能可以在终端中显示日期?
未知的人

@Zanna实际上不是一个新问题,它与我提出的一个问题有关。
未知人士

1
@Unknownperson,如果您希望默认情况下在终端中显示日期,那与“此代码的作用”确实是一个完全不同的问题,因为您需要编辑PS1变量(或者可以通过终端应用程序来完成)设置-关于我不了解的内容)不在本文的讨论范围之内
Zanna

1
@Unknownperson date 确实在终端(命令行界面)显示日期。如果您想要更多东西(例如Zanna的建议),请提出一个新问题。
Melebius

4
echo -n "Today's date is: "

它将打印:今天的日期是:

date +"%A, %B %-d, %Y"

它将打印如下内容:2017年2月7日,星期二

忠告

  1. 使用man--help命令来了解有关其他任何命令的更多信息。
    例如:

    man echo
    echo --help
  2. 应对这些挑战挑战确实可以帮助您学会在终端上做事。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.