Saya ingin membuat file dengan menggunakan perintah echo dan operator pengalihan, file harus dibuat dari beberapa baris.
Saya mencoba memasukkan baris baru dengan "\ n" di dalam string:
echo "first line\nsecond line\nthirdline\n" > foo
tetapi dengan cara ini tidak ada file dengan tiga baris dibuat tetapi file dengan hanya satu baris dan konten kata demi kata dari string.
Bagaimana saya bisa membuat hanya menggunakan perintah ini file dengan beberapa baris?
shell
command-line
echo
newlines
Abdul Al Hazred
sumber
sumber
Jawaban:
Anda meminta untuk menggunakan beberapa sintaks dengan
echo
perintah:(Tapi pertimbangkan juga jawaban lain yang Anda dapatkan.)
The
$'...'
mengembang membangun tertanam escape sequence ANSI.sumber
Apa yang dilakukan gema dengan pelarian karakter adalah implementasi didefinisikan. Dalam banyak implementasi gema (termasuk yang paling modern), string yang diteruskan tidak diperiksa untuk lolos sama sekali secara default.
Dengan gema yang disediakan oleh GNU bash (sebagai builtin), dan beberapa varian gema lainnya, Anda dapat melakukan sesuatu seperti berikut ini:
Namun, ini benar-benar terdengar seperti yang Anda inginkan
printf
, yang lebih mudah dibaca oleh mata saya, dan lebih portabel juga (memiliki fitur ini didefinisikan oleh POSIX):Anda juga dapat mempertimbangkan untuk menggunakan dokumen di sini :
sumber
echo -en 'text..'
, sedangkan jawaban yang diterima tidak mengenali karakter baris baru saya (\n
),echo -en
memang.Berikut adalah beberapa cara lain untuk membuat file multi-line menggunakan
echo
perintah:di mana perintah kedua dan ketiga menggunakan
>>
operator pengalihan, yang menyebabkan output dari perintah ditambahkan (ditambahkan) ke file (yang seharusnya sudah ada, pada titik ini).Atau
di mana tanda kurung mengelompokkan
echo
perintah ke dalam satu sub-proses, yang terlihat dan bertindak seperti program tunggal mana pun yang menghasilkan banyak baris (sepertils
, misalnya).Variasi halus di atas adalah
Ini sedikit lebih efisien daripada jawaban kedua karena tidak membuat sub-proses. Namun, sintaksnya sedikit lebih rumit: perhatikan bahwa Anda harus memiliki spasi setelah
{
tanda titik koma dan sebelum titik koma}
.Lihat Apa saja kontrol shell dan operator redirection? untuk informasi lebih lanjut.
sumber
Untuk memberikan opsi lain, Anda bisa menekan Enter (yaitu, baris baru literal):
Perhatikan bahwa Anda tidak mengetik
>
di awal baris kedua. Itulah prompt shell sekunder$PS2
,, yang dicetak oleh shell ketika Anda mengetik perintah yang tidak lengkap (misalnya, dalam hal ini, perintah dengan karakter kutipan yang tidak cocok).sumber
POSIX 7 mengatakan Anda tidak bisa
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
tidak didefinisikan dan backslash adalah implementasi didefinisikan:kecuali Anda memiliki ekstensi XSI opsional.
Jadi gunakan
printf
saja:yang File Format Notasi :
Juga perlu diingat bahwa Ubuntu 15.10 dan sebagian besar distro mengimplementasikan
echo
keduanya sebagai:help echo
which echo
yang dapat menyebabkan beberapa kebingungan.
sumber
echo
builtin di setiap shell yang tersedia di sistem. Di Ubuntu / bin / sh biasanya dash, bash juga datang secara default. zsh, rc, mksh, yash, csh, tcsh, ksh93 ... semua akan memiliki gema sendiri dengan perilaku yang berbeda. Perhatikan bahwawhich echo
tidak akan memberi Anda jalur gema sistem di semua shell.which
awalnya (di tahun 80-an) skrip csh hanya untuk pengguna csh (memuat alias dari ~ / .cshrc) dan masih ada di beberapa sistem.which
adalah builtin di zsh dan tcsh.