Odwrotny ukośnik poza cudzysłowami oznacza „interpretuj następny znak dosłownie podczas analizowania”. Ponieważ .
jest to zwykły znak dla analizatora składni, \.
jest analizowany w taki sam sposób, jak .
i wywołuje funkcję wbudowaną .
(której source
synonimem jest bash).
Jest jeden przypadek, w którym może to zmienić w tym kontekście. Jeśli użytkownik zdefiniował .
wcześniej wywołany alias .profile
i .profile
jest odczytywany w powłoce, która rozwija aliasy (co domyślnie bash robi tylko wtedy, gdy jest wywoływany interaktywnie), wówczas .
wyzwala alias, ale \.
nadal wyzwala wbudowane, ponieważ powłoka nie próbuje rozszerzenia aliasu na słowa, które były cytowane w jakikolwiek sposób.
Podejrzewam, że .
zmieniono to, \.
ponieważ użytkownik złożył skargę po utworzeniu aliasu .
.
Zauważ, że \.
wywołałoby funkcję o nazwie .
. Prawdopodobnie użytkownicy piszący funkcje są bardziej kompetentni niż użytkownicy piszący aliasy i wiedzieliby, że przedefiniowanie standardowego polecenia .profile
jest złym pomysłem, jeśli zamierzasz dołączyć kod stron trzecich. Ale jeśli chcesz ominąć zarówno aliasy, jak i funkcje, możesz pisać command .
. Autor tego fragmentu też tego nie zrobił, ponieważ troszczył się o antyczne muszle, które nie miały command
wbudowanego, lub bardziej prawdopodobne, ponieważ nie byli tego świadomi.
Nawiasem mówiąc, zdefiniowanie dowolnego aliasu .profile
jest złym pomysłem, ponieważ .profile
jest to skrypt inicjujący sesję , a nie skrypt inicjujący powłokę . Należą do niej aliasy dla bash .bashrc
.
Gilles „SO- przestań być zły”
źródło