这个语法是什么意思?

Unk*_*son 16 command-line bash scripts date syntax

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

这些线有什么作用?它们是如何工作的?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
Run Code Online (Sandbox Code Playgroud)

Zan*_*nna 79

$ type echo
echo is a shell builtin
Run Code Online (Sandbox Code Playgroud)

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

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

$ help echo
Write arguments to the standard output
...
-n  do not append a newline
Run Code Online (Sandbox Code Playgroud)

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

zanna@monster:~$ echo -n "Today's date is: "
Today's date is: zanna@monster:~$ 
Run Code Online (Sandbox Code Playgroud)

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

$ type date
date is /bin/date
Run Code Online (Sandbox Code Playgroud)

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

$ man date
Display the current time in the given FORMAT, or set the system date.
Run Code Online (Sandbox Code Playgroud)

date命令后面的字符是格式选项(必须以 开头+) - 指定日期的不同部分(例如%A是星期几的全名 - 请参阅其余部分以man date获取完整的选项列表)

$ date +"%A, %B %-d, %Y"
Tuesday, February 7, 2017
Run Code Online (Sandbox Code Playgroud)

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

Today's date is: Tuesday, February 7, 2017
Run Code Online (Sandbox Code Playgroud)

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

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017
Run Code Online (Sandbox Code Playgroud)

  • 这是一个高级 RTFM 答案,+1 (22认同)
  • 您实际上也可以将加号放在引号内。Bash 有一种奇怪的方式将引用的文本和相邻的文本放在一起运行,例如 cd "$x"/output 甚至 cd nospace/"with space"/nospace (2认同)

Mel*_*ius 11

您应该从手册页开始,命令man. 只需键入man <command>即可获取有关 a 的信息<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
Run Code Online (Sandbox Code Playgroud)

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

日期

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
Run Code Online (Sandbox Code Playgroud)

我希望很清楚。如果没有,请随意询问。