GNU/Linux >> Belajar Linux >  >> Linux

bash:cara menyampaikan argumen baris perintah yang berisi karakter khusus

Anda dapat:

  1. Lepaskan setiap simbol khusus dengan garis miring terbalik (seperti pada \[abc\]_\[x\|y\] ) atau
  2. Kutip ganda seluruh argumen (seperti pada "[abc]_[x|y]" ).

EDIT: Seperti yang telah ditunjukkan beberapa orang, mengutip ganda tidak mencegah ekspansi variabel atau substitusi perintah. Oleh karena itu, jika regex Anda berisi sesuatu yang dapat ditafsirkan oleh bash sebagai salah satunya, gunakan tanda kutip tunggal.


Gunakan tanda kutip tunggal. Tanda kutip tunggal memastikan tidak ada karakter yang ditafsirkan.

$ printf %s 'spaces  are  not  interpreted away
neither are new lines
nor variable names $TESTING
nor square brackets [TESTING]
nor pipe characters or redirection symbols | > <
nor the semicolon ;
nor backslashes \a \b \c \\
the only thing that does not work is the single quote itself
'

Ada dua solusi jika Anda perlu menyematkan satu kutipan:

$ printf '%s\n' '[ Don'"'"'t worry, be happy! ]'
[ Don't worry, be happy! ]
$ printf '%s\n' '[ Don'\''t worry, be happy! ]'
[ Don't worry, be happy! ]

Per man bash

Ada tiga mekanisme penawaran:escape character , tanda kutip tunggal, dan tanda kutip ganda.

Garis miring terbalik tanpa tanda kutip (\ ) adalahkarakter escape . Itu mempertahankan nilai literal dari karakter berikutnya yang mengikuti, dengan pengecualian . Jika \ pasangan muncul, dan garis miring terbalik tidak dikutip dengan sendirinya, pasangan \ diperlakukan sebagai kelanjutan baris (artinya, dihapus dari aliran input dan diabaikan secara efektif).

Melampirkan karakter dalam tanda kutip tunggal mempertahankan nilai literal setiap karakter dalam tanda kutip. Kutipan tunggal tidak boleh muncul di antara tanda kutip tunggal, meskipun diawali dengan garis miring terbalik.

Mengapit karakter dalam tanda kutip ganda mempertahankan nilai literal semua karakter dalam tanda kutip, kecuali $ , ` , \ , dan, saat perluasan riwayat diaktifkan, ! . Karakter $ dan ` mempertahankan makna khususnya dalam tanda kutip ganda. Garis miring terbalik mempertahankan arti khususnya hanya jika diikuti oleh salah satu karakter berikut:$ , ` , " ,\ , atau . Kutipan ganda mungkin dikutip dalam tanda kutip ganda dengan mengawalinya 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.

Parameter khusus * dan @ memiliki arti khusus ketika dalam tanda kutip ganda (lihat PARAMETER di bawah).

Kata-kata dalam bentuk $' tali ' diperlakukan secara khusus. Kata diperluas menjadi string , dengan karakter yang di-escaped backslash diganti seperti yang ditentukan oleh standar ANSI C. Urutan pelolosan garis miring terbalik, jika ada, didekodekan sebagai berikut:

       \a     alert (bell)
       \b     backspace
       \e
       \E     an escape character
       \f     form feed
       \n     new line
       \r     carriage return
       \t     horizontal tab
       \v     vertical tab
       \\     backslash
       \'     single quote
       \"     double quote
       \nnn   the eight-bit character whose value is the octal value nnn
              (one to three digits)
       \xHH   the eight-bit character whose value is the hexadecimal value HH
              (one or two hex digits)
       \uHHHH the Unicode (ISO/IEC 10646) character whose value is
              the hexadecimal value HHHH (one to four hex digits)
       \UHHHHHHHH
              the Unicode (ISO/IEC 10646) character whose value is
              the hexadecimal value HHHHHHHH (one to eight hex digits)
       \cx    a control-x character

Hasil yang diperluas dikutip tunggal, seolah-olah tanda dolar tidak ada.

String yang dikutip ganda diawali dengan tanda adollar ($" tali " ) akan menyebabkan string diterjemahkan sesuai dengan lokal saat ini. Jika lokal saat ini adalah C atau POSIX , tanda dolar diabaikan. Jika string diterjemahkan dan diganti, penggantinya dikutip ganda.


Linux
  1. Lewati Argumen Baris Perintah ke Skrip Bash?

  2. Bagaimana Argumen Baris Perintah Jarak Jauh Ssh Diurai?

  3. Cara mengambil versi Java menggunakan perintah baris tunggal di Linux

  1. Pertahankan Kutipan dalam argumen bash

  2. perintah bash alias dengan tanda kutip tunggal dan ganda

  3. Cara meneruskan output perintah sebagai beberapa argumen ke perintah lain

  1. Cara Menghapus Riwayat Baris Perintah BASH di Linux

  2. Bagaimana cara membagi string dengan tanda kutip (seperti argumen perintah) di bash?

  3. Bash jika dalam satu baris