GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Garis Miring Balik Tunggal Ditampilkan Saat Menggunakan Kutipan?

Saya selalu berpikir bahwa bash memperlakukan garis miring terbalik sama saat menggunakan tanpa atau dengan tanda kutip ganda, tetapi saya salah:

[[email protected] ~]$ echo "foo \ "
foo \
[[email protected] ~]$ echo foo \ # Space after \
foo

Jadi saya pikir garis miring terbalik selalu dicetak, saat menggunakan tanda kutip ganda, tetapi:

[[email protected] ~]$ echo "foo \" "
foo "
[[email protected] ~]$ echo "foo \\ "
foo \

Mengapa garis miring terbalik di baris kode pertama ditampilkan?

Jawaban yang Diterima:

Bagian 3.1.2.3 Kutipan ganda dari manual GNU Bash mengatakan:

Garis miring terbalik mempertahankan arti khusus hanya jika diikuti oleh salah satu dari
karakter berikut:‘$ ’, ‘` ’, ‘" ’, ‘\ ’, atau newline . Dalam tanda kutip ganda, garis miring terbalik yang diikuti oleh salah satu
karakter ini akan dihapus. Garis miring terbalik karakter sebelumnya
tanpa arti khusus dibiarkan tidak dimodifikasi. Kutipan ganda dapat
dikutip dalam tanda kutip ganda dengan mendahuluinya dengan garis miring terbalik. Jika
diaktifkan, perluasan riwayat akan dilakukan kecuali '! ' muncul
dalam tanda kutip ganda diloloskan menggunakan garis miring terbalik. Garis miring terbalik sebelum
'! ' tidak dihapus.

Jadi \ dalam tanda kutip ganda diperlakukan berbeda baik dari \ dalam tanda kutip tunggal dan \ kutipan luar. Ini diperlakukan secara harfiah kecuali jika dalam posisi menyebabkan karakter diperlakukan secara harfiah yang dapat memiliki arti khusus dalam tanda kutip ganda.

Perhatikan bahwa urutan seperti \' , \? , dan \* diperlakukan secara harfiah dan garis miring terbalik tidak dihapus, karena ' , ? dan * sudah tidak memiliki arti khusus jika diapit dalam tanda kutip ganda.


Linux
  1. Mengapa Semua Orang Menggunakan Docker?

  2. Kapan harus membungkus tanda kutip di sekitar variabel shell?

  3. Saat menggunakan os.execlp, mengapa `python` membutuhkan `python` sebagai argv[0]

  1. Mengapa $LD_LIBRARY_PATH saya tidak disetel saat menggunakan layar dengan bash?

  2. Penggunaan / saat menggunakan cd

  3. REJECT vs DROP saat menggunakan iptables

  1. Kapan Mengutip Ganda Diperlukan?

  2. Mengapa Seseorang Dapat Menambahkan ~/.profile Ke ~/.bash_profile?

  3. Mengupas tanda kutip tunggal dan ganda dalam sebuah string hanya menggunakan perintah bash / standar Linux