Apa arti sintaksis ini?

16

Saya baru ke terminal dan mencoba mempelajari cara menggunakannya.

Apa yang dilakukan garis-garis ini? Dan bagaimana cara kerjanya?

echo -n "Today's date is: "
date +"%A, %B %-d, %Y"
Orang tak dikenal
sumber
7
$ man date && man echodi shell.
code_dredd

Jawaban:

76
$ type echo
echo is a shell builtin

artinya, echoperintah adalah bagian dari bashprogram itu sendiri (dengan asumsi Anda menggunakan bash)

-n adalah pilihan, jadi mari kita lihat apa fungsinya

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

Jadi ketika kita menjalankan baris:

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

Hmm itu tidak terlihat sangat bagus, karena tidak ada baris baru setelah teks dicetak. Kami akan kembali ke sini.

$ type date
date is /bin/date

ah jadi dateperintahnya adalah program terpisah. Apa fungsinya?

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

Karakter setelah dateperintah adalah opsi format (yang harus didahului oleh +) - bagian tanggal yang berbeda ditentukan (misalnya %Aadalah nama lengkap hari dalam seminggu - lihat bagian selanjutnya man dateuntuk daftar opsi lengkap)

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

Jadi jika kita menempatkan perintah bersama dalam sebuah skrip dan kemudian menjalankan skrip kita akan dapatkan

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

Bagus! Jika Anda menginginkan efek yang sama di terminal, Anda dapat menggunakan tanda titik koma untuk memisahkan kedua perintah, bukan baris baru:

$ echo -n "Today's date is: " ; date +"%A, %B %-d, %Y"
Today's date is: Tuesday, February 7, 2017
Zanna
sumber
21
Ini adalah jawaban RTFM tingkat lanjut, +1
YSC
1
Saya akan mengatakan ini tidak ada penjelasan untuk tanda plus sebelum argumennya
Délisson Junio
@ DélissonJunio ​​diedit, tetapi jawaban Melebius menunjukkannya lebih baik dengan kutipan halaman manual langsung
Zanna
@Zanna Aku bukan OP, tapi yang menarik perhatianku adalah fakta bahwa plus nampak aneh karena kupikir bash akan menafsirkan segala sesuatu di antara tanda kutip sebagai satu argumen, tidak termasuk plus. Tapi saya rasa ini adalah pertanyaan lain
Délisson Junio
2
Anda benar-benar dapat memasukkan nilai plus di dalam tanda kutip juga. Bash memiliki perasaan aneh dalam menjalankan teks yang dikutip dan berdekatan, mis. Cd "$ x" / output atau bahkan cd nospace / "with space" / nospace
StarWeaver
10

Anda harus mulai dengan halaman manual, perintah man. Cukup ketik man <command>untuk mendapatkan informasi tentang a <command>. Menavigasi mantidak terlalu intuitif tetapi ada banyak panduan untuk itu, misalnya https://wiki.gentoo.org/wiki/Man_page/Navigate#Navigating_and_searching_man_pages .

Bagian yang relevan dari man echodan man date:

gema

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

Echo the STRING(s) to standard output.

-n     do not output the trailing newline

Jadi ia mencetak string dan tidak pergi ke baris baru setelah itu (yang merupakan perilaku default), sehingga output dari perintah selanjutnya akan dicetak di sisi kanan string yang digaungkan.

tanggal

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

Saya harap itu jelas. Jangan ragu untuk bertanya apakah tidak.

Melebius
sumber
Terima kasih banyak. Saya punya pertanyaan lain: Apakah sudah ada fungsi bawaan untuk menunjukkan tanggal di terminal?
Orang tidak dikenal
@Zanna Sebenarnya bukan pertanyaan baru, ini terkait dengan pertanyaan yang saya tanyakan.
Orang tidak dikenal
1
@ Orang yang tidak dikenal jika Anda ingin tanggal ditampilkan di terminal secara default, itu benar-benar pertanyaan yang sangat berbeda dengan "apa yang dilakukan kode ini" karena Anda perlu mengedit variabel PS1 (atau mungkin itu dapat dilakukan dengan aplikasi terminal pengaturan - tentang itu saya bodoh) yang berada di luar cakupan posting ini
Zanna
1
@ Orang yang date tidak dikenal menunjukkan tanggal di terminal (antarmuka baris perintah). Jika Anda menginginkan sesuatu yang lebih (seperti apa yang disarankan Zanna), silakan ajukan pertanyaan baru.
Melebius
4
echo -n "Today's date is: "

Ini akan mencetak: Tanggal hari ini adalah:

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

Ini akan mencetak sesuatu seperti ini: Selasa, 7 Februari 2017

Saran :

  1. gunakan manatau --helpperintah untuk tahu lebih banyak tentang perintah lain.
    misalnya:

    man echo
    echo --help
  2. Cobalah tantangan-tantangan ini tantangan yang sangat bagus untuk membantu Anda belajar melakukan hal-hal di terminal.

Avinash
sumber