Często widzę tutoriale w Internecie lub posty na tej stronie, które często wykorzystują następujące znaki w wierszu poleceń. Często wydaje się, że są one wykorzystywane do dość podobnych celów. Jakie są między nimi różnice, gdy są używane w wierszu poleceń lub do programowania powłoki? W jakim celu wykorzystam który z nich?
" " double quotes
' ' single quotes
` ` backticks
command-line
bash
NES
źródło
źródło
\
jest zawsze traktowany dosłownie, gdy jest ujęty w pojedyncze cytaty, nawet jeśli poprzedza on'
. Po otwarciu'
następny'
jest zawsze interpretowany jako cytat zamykający. Coś w rodzaju cytowania'
w ciągu pojedynczego cudzysłowu można osiągnąć, kończąc cytowanie, unikając'
pojedynczych znaków i ponownie rozpoczynając cytowanie. Oznacza to, że chociaż\'
nie działa między otwierającymi i zamykającymi'
postaciami,'\''
działa. (Patrz Gilles „s korekta do jednego z moich postów, gdy ja popełnili ten sam błąd o szczegóły.)Jest to bardzo ładnie wyjaśnione w odpowiedniej sekcji podręcznika bash. W skrócie, wszystko w obrębie pojedynczych cytatów jest interpretowane dosłownie. Na przykład:
Porównaj to z wersjami nie cytowanymi:
Podwójne cudzysłowy pozwalają na zmienną ekspansję (także ekspansję historii i kilka innych rzeczy). Zasadniczo używasz ich, gdy masz do czynienia z czymś, co chcesz rozszerzyć. Na przykład:
Innymi słowy, pojedyncze cudzysłowy całkowicie chronią ciąg przed powłoką, podczas gdy podwójne cudzysłowy chronią niektóre rzeczy (na przykład spacje), ale umożliwiają prawidłowe interpretowanie / interpretowanie zmiennych i znaków specjalnych.
źródło
Pojedyncze cudzysłowy (
''
) służą do zachowania literalnej wartości każdego znaku zawartego w cudzysłowach.Używając podwójnych cudzysłowów (
""
), zachowana jest dosłowna wartość wszystkich dołączonych znaków, z wyjątkiem znaku dolara ($
), odwrotnych znaków ( pojedyncze cudzysłowy wstecz``
) i odwrotnego ukośnika (\
).Po umieszczeniu w back-ticks (
``
) powłoka interpretuje coś, co oznacza „wynik polecenia wewnątrz back-ticks”. Jest to określane jako „podstawianie polecenia”, ponieważ wynik polecenia jest zastępowany przez samo polecenie.Bibliografia:
źródło
Pojedyncze cudzysłowy zapobiegają rozszerzaniu zmiennych, a podwójne cudzysłowy pozwalają.
źródło
Mówię ogólnie, ale:
""
- Służy do przetwarzania niektórych informacji w nich przed wyjściem. (Jak w PHP.)name=NESS; echo "Hello my name is $name"
wyświetli:Hello my name is NESS
''
- Służy do wyświetlania wyniku w obecnej postaci. (Również jak w PHP.)Hello my name is $name
Różnica między podwójnymi i pojedynczymi cudzysłowami polega na tym, że podwójne cudzysłowy przetwarzają zmienną i pokazują wartość, podczas gdy pojedyncze cudzysłowy pokazują nazwę zmiennej bez przetwarzania.
``
- Służy do cytowania poleceń, które są później przypisywane do innej zmiennej.źródło
Pojedyncze cudzysłowy zawierają wartość, którą należy interpretować dosłownie: wszystkie typy rozwinięć są pomijane. Zazwyczaj stosowane, jeśli wartość zawiera lub może zawierać spacji (przestrzeń, kartę, new-line) lub znaków specjalnych (
$
,\
,`
), że użytkownik nie chce być rozszerzona / traktowany specjalnie przez powłokę.Podwójne cudzysłowy zawierają wartość, która będzie zawierała zmienne i dokonano zamiany znaków. Wymagane, gdy dane wyjściowe mogą zawierać białe znaki i muszą być przypisane jako pojedyncza wartość.
Cudzysłowy zawierają polecenie, którego wyniki są pożądane jako wartość. Nowsze powłoki pozwalają na użycie
$(...)
zamiast`...`
. Wolę nowszą metodę.Poniższy kod może pomóc zrozumieć, co się dzieje.
źródło