Z jakiegoś dziwnego powodu próbowałem „” jako separatora słów w identyfikatorach, jak w:
$ export foo'bar=1
>
> ^C
$
Wynik jest taki, jak pokazano powyżej, tzn. Natychmiastowa zmiana na „>” i system oczywiście czeka na więcej informacji z mojej strony. Jak widzisz, musiałem nacisnąć Ctrl-C, aby uciec. To samo dzieje się przy użyciu innych poleceń, takich jak
$ ls foo'bar
$ mkdir foo'bar
Jestem ciekawy sensu tego wszystkiego, właśnie to specjalne znaczenie „” ma w komendach terminalowych (tak wyjątkowych, że rozbiera się je nawet wewnątrz identyfikatorów).
Dodatkowo: na marginesie chciałbym również znać zestaw znaków specjalnych lub w inny sposób nieprawidłowy w nazwach plików i folderów, zarówno w systemach uniksowych, jak i Windows (aby uzyskać wspólny podzbiór bezpiecznych) (w szczególności, co ze wszystkimi spoza ASCII?).
Dziękuję, Denis
źródło
Odpowiedzi:
Znak „jest bardzo potężnym znakiem, ilekroć jest używany w dowolnym poleceniu powłoki. Zasadniczo „(znaki apostrofowe) wyłącza wszelkiego rodzaju transformacje lub modyfikacje. Rozważyłby wszystko, co jest objęte znakami „jako pojedynczy byt, tj. Pojedynczy parametr. Absolutnie nie nastąpiłby żaden zamiennik ani ekspansja.
Przykład:
wygeneruje na wyjściu
$HOME
sam łańcuch i nie wydrukuje ścieżki do twojego katalogu domowego. Ponieważ pojedyncze cudzysłowy zapobiegają jakiejkolwiek ekspansji, podstawianie i proste uważa, że cokolwiek jest obecne jako prosty parametr sam w sobie.Jeśli chcesz użyć apostrofu w obecnej postaci, musisz uciec od niego:
Jeśli to nie nastąpi, zaczeka na zamknięcie pary, tak jak to miało miejsce w twoim pierwszym przykładzie.
Tak więc, poprawione, twoje polecenie będzie:
UWAGA: Jak zauważył Milan Todorovic, nie będzie to ważne, ponieważ w tym przypadku nie można użyć apostrofu.
źródło
Postać
'
jest postacią specjalną. Używasz go, aby zaznaczyć część wiersza poleceń, która nie zostanie zmieniona (np. Nie zastępuj symboli wieloznacznych). Na przykład:Oznacza to, że argumentem
ls
było,bla*
a nie wszystko, co zaczyna się odbla
.Powodem, dla którego dostajesz
>
postać, jest to, że musisz użyć jednego'
do otwarcia, a drugiego'
do zamknięcia części, która nie zostanie zmieniona.Jeśli chcesz używać
'
w nazwach folderów musisz uciec to tak:\'
. Więc jeśli chcesz wyświetlić listę nazwanych folderówfoo'bar
, wpiszls foo\'bar
.Aha, i nie jestem pewien, czy można używać
'
w nazwach zmiennych środowiskowych. Myślę, że nie można używaćexport foo\'bar=1
,Mam nadzieję że to pomoże.
źródło