Jak mogę uciec od nazwy podkatalogu ze znakiem ampersand?

9

Uruchamianie kornshell i próba przejścia przez drzewo katalogów. Chcesz cd do podkatalogu o następującej nazwie:

 -3ab_&_-3dc.img

Moje pytanie brzmi: JAK muszę uciec ze znaku handlowego w tym imieniu? Próbowałem różnych kombinacji podwójnych cudzysłowów i odwrotnych ukośników bez powodzenia.

RCinICT
źródło

Odpowiedzi:

11

Dla &(lub prawie każdej innej postaci masz dwie proste możliwości).

  • Umieść pojedyncze cytaty wokół całej rzeczy: ' -3ab_&_-3dc.img'
  • Umieść odwrotny ukośnik przed każdą kłopotliwą postacią: -3ab_\&_-3dc.img

Istnieją dwa wyjątki:

  • Metoda pojedynczej wyceny nie działa w przypadku pojedynczej wyceny. Odwrotny ukośnik nie jest wyjątkowy w pojedynczych cudzysłowach, więc nie możesz bezpośrednio z niego korzystać. Możesz zakończyć ciąg pojedynczego cudzysłowu, natychmiast użyć ukośnika odwrotnego i pojedynczego cudzysłowu i ponownie uruchomić pojedynczy cudzysłów. Tak na przykład, jeśli nazwa katalogu jest foo'bar\qux: cd 'foo'\''bar\qux'. Możesz to zapamiętać w ten sposób: wewnątrz pojedynczych cytatów '\''otrzymujesz pojedynczy cytat.
  • Metoda odwrotnego ukośnika nie działa w przypadku nowego wiersza: odwrotny ukośnik jest po prostu ignorowany. Musisz umieścić pojedyncze cudzysłowy wokół nowego wiersza.

Możesz także używać podwójnych cudzysłowów, ale musisz wstawić odwrotny ukośnik przed niektórymi znakami. Pojedyncze cytaty są prostsze.

Istnieje tutaj dodatkowa trudność, polegająca na tym, że nazwa katalogu zaczyna się od myślnika. Ten znak informuje cdpolecenie (jak prawie każde polecenie), że następuje opcja. Myślnik nie jest szczególny dla powłoki, tylko dla polecenia, więc cudzysłowy nie wpłyną na to. Istnieją dwa sposoby przekazania argumentu rozpoczynającego się od myślnika do polecenia bez interpretowania go jako opcji:

  • Znajdź inny sposób na wyrażenie tego argumentu. W przypadku nazwy pliku dodanie ./z przodu nadal oznacza ten sam plik.
  • Umieść argument --wcześniej. To mówi komendie, aby przestała szukać opcji.

Oto kilka sposobów na przejście do tego podkatalogu:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'
Gilles „SO- przestań być zły”
źródło
Dzięki. Myślałem, że też wypróbowałem ten format, ale zapomniałem uciec ze znaku handlowego i handlowego (jak w twoim trzecim przykładzie). Kiedy to zrobiłem, zadziałało.
RCinICT
5

Znak ampersand wymaga ucieczki, ale problem, który masz, jest raczej związany z prowadzeniem -niż ze znakiem ampersand. Wiodąca -płyta cd myśli, że przekazujesz opcje. Możesz obejść ten problem, używając ./:

cd './-3ab_&_-3dc.img'
Jordan
źródło
To &zdecydowanie problem. Jeśli chodzi o -, to zależy od powłoki. Zsh jest całkiem zadowolony cdz katalogu zaczynającego się od -. Jednak bash nie jest.
Patrick
Dzięki. Myślałem, że też wypróbowałem ten format, ale zapomniałem uciec ze znaku handlowego. Kiedy to zrobiłem, zadziałało.
RCinICT