GNU/Linux >> Znalost Linux >  >> Linux

Proč se při použití uvozovek zobrazuje jedno zpětné lomítko?

Vždy jsem si myslel, že bash zachází se zpětnými lomítky stejně při použití bez uvozovek nebo s uvozovkami, ale mýlil jsem se:

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

Takže jsem si myslel, že při použití dvojitých uvozovek se zpětná lomítka tisknou vždy, ale:

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

Proč je na prvním řádku kódu zobrazeno zpětné lomítko?

Přijatá odpověď:

Oddíl 3.1.2.3 Dvojité uvozovky v příručce GNU Bash říká:

Zpětné lomítko si zachová svůj zvláštní význam pouze tehdy, když za ním následuje jeden z
následujících znaků:‘$ “, „` “, „` “, „\ “ nebo newline . V dvojitých uvozovkách jsou odstraněna zpětná lomítka, za kterými následuje jeden
z těchto znaků. Zpětná lomítka před znaky
bez zvláštního významu zůstávají beze změny. Dvojité uvozovky mohou být
uvedeny v dvojitých uvozovkách tak, že se před ně uvede zpětné lomítko. Pokud je
povoleno, rozbalení historie se provede, pokud se nezobrazí „! ’ objevující se
ve dvojitých uvozovkách je zakončeno zpětným lomítkem. Zpětné lomítko před
! “ není odstraněno.

Tedy \ ve dvojitých uvozovkách se zachází odlišně od \ v jednoduchých uvozovkách a \ vnější uvozovky. Zachází se s ním doslovně, kromě případů, kdy je v pozici, kdy může způsobit doslovné zacházení s postavou, která by jinak mohla mít zvláštní význam v uvozovkách.

Všimněte si, že sekvence jako \' , \? a \* jsou zpracovány doslovně a zpětné lomítko není odstraněno, protože ' , ? a * již nemají žádný zvláštní význam, když jsou uzavřeny ve dvojitých uvozovkách.


Linux
  1. Kdy je nutné dvojité uvozování?

  2. Proč se při používání Vlc spořič obrazovky neustále probouzí?

  3. Proč by se dalo přidat ~/.profile do ~/.bash_profile?

  1. Odstraňování jednoduchých a dvojitých uvozovek v řetězci pouze pomocí bash / standardních příkazů Linuxu

  2. Proč se moje $LD_LIBRARY_PATH při použití obrazovky s bash odstaví?

  3. Proč používat innodb_file_per_table?

  1. Kdy a proč bych měl používat Apt-get Update?

  2. Proč všichni používají Docker?

  3. REJECT vs DROP při použití iptables