Baris perintah: <<< bukannya <<

63

Mengapa perintah md5sum <<< 'ddd' (keluaran:) d6d88f2e50080b9602da53dac1102762 -benar, dan md5sum << 'ddd'tidak?

Apa <<<artinya

Jean Paulus
sumber

Jawaban:

45

The <<<dimulai “di sini string”: string yang diperluas dan diumpankan ke stdin program. (Dalam kasus Anda, ekspansi tidak banyak terjadi.) Ini setara dengan ini:

echo ddd | md5sum

Di sisi lain, <<mulai dokumen di sini. Semua baris berikut hingga satu yang mengandung penanda dddakan terdiri dari input program. (Anda harus menggunakan penanda yang tidak mungkin muncul dalam data Anda.) Anda dapat mencapai efek yang sama seperti di atas seperti ini:

md5sum <<END
ddd
END

Ada satu perbedaan antara <<ENDdan <<'END': Tanpa tanda kutip, variabel apa pun, urutan keluar, dll. Dalam dokumen di sini akan diperluas seperti biasa.

chirlu
sumber
3
Di mana itu tidak setara adalah bahwa kecuali di rc, <<<(suka <<) menggunakan file sementara sehingga dapat digunakan oleh perintah yang lseekstdin mereka.
Stéphane Chazelas
32

<<<memperkenalkan string di sini : string setelah <<<dilewatkan sebagai input ke perintah. Ini berasal dari port Byron Rakitzis rc(shell Plan 9) ke Unix, dan juga hadir dalam zsh, ksh93 dan bash.

<<memperkenalkan dokumen di sini : baris berikutnya dari skrip shell dilewatkan sebagai input ke perintah, dan string setelahnya <<adalah terminator. Di sini dokumen berfungsi di semua cangkang Bourne-style (Bourne, POSIX, ash, bash, ksh, zsh, ...), shell-C-style (csh, tcsh), dan shell Plan 9 (rc, es).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Tidak, <<<bukan kshekstensi, jalannya adalah rc-> zsh-> ksh93-> bash( kshcatatan rilis mengakui untuk sekali meminjam fitur dari zsh). <<juga bekerja di rckerang gaya
Stéphane Chazelas
Ada perbedaan antara rcdan zsh <<<meskipun itu rctidak termasuk karakter baris baru dan tidak menggunakan file temp (menggunakan pipa dan proses tambahan memberi makan setidaknya di port ke Linux).
Stéphane Chazelas
Untuk lebih tepatnya sepertinya <<<berasal dari port Unix rckarena tidak terlihat seperti Plan9 rcmemilikinya.
Stéphane Chazelas