この構文はどういう意味ですか?


16

私はターミナルに慣れていないので、使い方を学ぼうとしています。

これらの行は何をしますか?そして、彼らはどのように機能しますか?

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

7
$ man date && man echoシェルで。
code_dredd

回答:


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

いいね!端末で同じ効果が必要な場合は、改行の代わりにセミコロンを使用して2つのコマンドを区切ることができます。

$ 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、編集されたが、Melebius'と答えたショーでは、より良いダイレクトmanページの引用を持つ
Zanna

@Zanna私はOPではありませんが、私の目を引いたのは、bashが引用符の間のすべてをプラスを含まない1つの引数として解釈すると思うので、プラスが奇妙に見えるという事実でした。しかし、これは別の質問だと思います
デリソンジュニオ

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 echoおよびの関連部分man 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の提案など)が必要な場合は、新しい質問をしてください。
メレビウス

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

印刷されます:今日の日付は:

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

次のように出力されます:2017年2月7日火曜日

アドバイス

  1. manまたは--helpコマンドを使用して、他のコマンドの詳細を確認します。
    例:

    man echo
    echo --help
  2. これらのチャレンジを試してみてくださいチャレンジは、ターミナルで物事を行うことを学ぶのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.