Bagaimana cara saya melepaskan nama sub-direktori dengan tanda ampersand di dalamnya?

9

Menjalankan kornshell dan mencoba melintasi pohon direktori. Ingin cd ke sub-direktori bernama sebagai berikut:

 -3ab_&_-3dc.img

Pertanyaan saya adalah BAGAIMANA saya perlu keluar dari ampersand dengan nama ini? Saya telah mencoba berbagai kombinasi tanda kutip ganda dan garis miring terbalik tanpa hasil.

RCinICT
sumber

Jawaban:

11

Untuk &(atau hampir semua karakter lain, Anda memiliki dua kemungkinan sederhana.

  • Letakkan tanda kutip tunggal di sekitar semuanya: ' -3ab_&_-3dc.img'
  • Letakkan garis miring terbalik di depan setiap karakter yang bermasalah: -3ab_\&_-3dc.img

Ada dua pengecualian:

  • Metode kutipan tunggal tidak berfungsi untuk kutipan tunggal. Backslash tidak spesial dalam tanda kutip tunggal, jadi Anda juga tidak bisa langsung menggunakannya. Yang dapat Anda lakukan adalah mengakhiri string yang dikutip tunggal, segera gunakan backslash plus kutipan tunggal, dan mulai kembali kutipan tunggal. Jadi misalnya, jika nama direktori adalah foo'bar\qux: cd 'foo'\''bar\qux'. Anda dapat mengingatnya seperti itu: di dalam tanda kutip tunggal, '\''memberi Anda satu kutipan.
  • Metode backslash tidak berfungsi untuk baris baru: backslash-baris baru diabaikan. Anda perlu menempatkan tanda kutip tunggal di sekitar baris baru.

Anda dapat menggunakan tanda kutip ganda juga, tetapi kemudian Anda harus membuat garis miring terbalik sebelum beberapa karakter. Kutipan tunggal lebih mudah.

Ada kesulitan tambahan di sini, yaitu nama direktori dimulai dengan tanda hubung. Karakter itu memberi tahu cdperintah (seperti hampir semua perintah) yang diikuti oleh opsi. Tanda hubung tidak khusus untuk shell, hanya untuk perintah, jadi tanda kutip tidak akan mempengaruhinya. Anda memiliki dua cara meneruskan argumen yang dimulai dengan tanda hubung ke perintah tanpa menafsirkannya sebagai opsi:

  • Temukan cara lain untuk mengekspresikan argumen ini. Untuk nama file, menambahkan ./di depan masih menunjuk file yang sama.
  • Letakkan argumen --sebelumnya. Itu memberitahu perintah untuk berhenti mencari opsi.

Jadi, inilah beberapa cara Anda dapat berubah ke subdirektori ini:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih. Pikir saya sudah mencoba format itu juga, tapi saya lupa untuk melarikan diri dari ampersand (seperti pada contoh 3 Anda). Ketika saya melakukannya, itu berhasil.
RCinICT
5

Ampersand memang perlu diloloskan, tetapi masalah yang Anda hadapi kemungkinan besar adalah dengan yang memimpin -, bukan dengan ampersand. -CD buatan terkemuka berpikir bahwa Anda memasukkan opsi. Anda dapat mengatasi ini dengan menggunakan ./:

cd './-3ab_&_-3dc.img'
jordanm
sumber
Ini &jelas merupakan masalah. Adapun -, itu tergantung pada shell. Zsh cukup senang cdmelihat direktori yang dimulai dengan a -. Namun bash tidak.
Patrick
Terima kasih. Kupikir aku sudah mencoba format itu juga, tapi aku lupa melarikan diri dari ampersand. Ketika saya melakukannya, itu berhasil.
RCinICT