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ů:‘$“, „`“, „`“, „\“ nebonewline. 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.