Coba jalankan yang berikut di bawah bash shell echo "Reboot your instance!"
Pada instalasi saya:
root@domU-12-31-39-04-11-83:/usr/local/bin# bash --version
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
root@domU-12-31-39-04-11-83:/usr/local/bin# uname -a
Linux domU-12-31-39-04-11-83 2.6.35-22-virtual #35-Ubuntu SMP Sat Oct 16 23:57:40 UTC 2010 i686 GNU/Linux
root@domU-12-31-39-04-11-83:/usr/local/bin# echo "Reboot your instance!"
-bash: !": event not found
Adakah yang bisa menjelaskan apa itu "bash events?" Saya belum pernah mendengar konsep ini sebelumnya. Juga, bagaimana saya harus menampilkan "!" di akhir kalimat?
+H
untuk mengaktifkan sesuatu dan-H
menonaktifkan sesuatu.+
merupakan kebalikan dari itu.!
adalah karakter khusus untuk bash, digunakan untuk merujuk ke perintah sebelumnya; misalnya,akan mengingat dan menjalankan perintah terakhir yang dimulai dengan string "rm", dan
akan mengingat tetapi tidak menjalankan perintah terakhir yang dimulai dengan string "rm". bash mengartikan tanda seru
echo "reboot your instance!"
sebagai " gantikan di sini perintah terakhir yang dimulai dengan karakter (s) segera setelah tanda seru ", dan mengomel pada Anda bahwa itu tidak dapat menemukan suatu peristiwa (perintah) dalam sejarah Anda yang dimulai dengan satu kutipan ganda.Mencoba
untuk melindungi (melarikan diri) tanda seru dari bash.
sumber
Untuk mengatasi masalah awal Anda, coba gunakan tanda kutip tunggal, bukan tanda kutip ganda. Dengan yang terakhir, bash akan mencoba untuk memperluas karakter tertentu sebelum meneruskan hasilnya ke perintah (gema dalam kasus ini). Dengan tanda kutip tunggal, bash melewati seluruh string, tidak berubah.
!
digunakan dalam perintah untuk merujuk ke sejarah baris perintah. Lihat: http://tldp.org/LDP/abs/html/abs-guide.html#HISTCOMMANDS untuk set lengkap. Dengan contoh di atas, bash mencoba untuk memperluas!"
sebagai referensi ke suatu peristiwa sebelum gema masuk, maka kesalahannya.Perhatikan bahwa dalam skrip, semua perintah riwayat dinonaktifkan, karena hanya masuk akal di shell interaktif.
Satu-satunya yang saya gunakan secara teratur, adalah
!$
. Itu memperluas argumen terakhir dari perintah sebelumnya. Ini adalah singkatan yang berguna di beberapa tempat.sumber
!!
mengisi perintah terakhir lengkap yang dimasukkan sangat berguna; khususnya,sudo !!
ataupfexec !!
$_
bekerja di lebih banyak shell daripada bash dan ini adalah variabel yang tepat, tidak seperti!$
. (dan @LeartS: Saya menyukai lelucon Anda tentang emotikon.;))Beri jarak saja! dan "daripada itu akan berhasil.
Tepuk tangan.
sumber
Iya, ! adalah karakter khusus untuk bash, digunakan untuk merujuk ke perintah sebelumnya.
Beberapa cara Anda dapat menangani situasi
Berikut ini akan menampilkan string apa adanya
Berikut ini akan menjalankan perintah dan menyatukan string
sumber
Di
bash 4.3
tampaknya Anda tidak perlu lagi menggunakan tanda kutip tunggal atauset +H
:sumber
set +H
atau mengutip. Atau Anda punyaset +H
tempat (seperti di/etc/profile
).Anda juga bisa menggunakan heredoc :
Ini menjengkelkan dalam kasus ini karena ini bukan satu-baris tetapi untuk perintah yang lebih lama (seperti menulis skrip bash), ini berfungsi dengan baik.
sumber