Bagaimana cara membuat direktori bernama '-p' di Linux dengan Bash? [duplikat]

22

Di Bash, bagaimana saya bisa membuat direktori bernama -p?

mkdir -pgagal.
mkdir "-p"gagal.
mkdir "\-p"gagal.
mkdir \-pgagal.

Jichao
sumber
1
Perhatikan bahwa semua ini berusaha keluar dari parameter untuk bash. Karena itu sama lolos karena tidak lolos, semua ini kecuali yang ketiga hanya akan mengirim string "-p" ke mkdir, yang akan menguraikannya sebagai opsi. Opsi parsing tidak dilakukan dalam bash, jadi cara lain (dijelaskan dalam jawaban di bawah) adalah fitur mkdir (atau lebih tepatnya, kurangnya bug).
Score_Under
11
Harus bertanya mengapa Anda ingin direktori seperti itu. Ini akan menjadi PITA untuk digunakan.
Daniel R Hicks
3
@DanielRHicks: Saya membuat folder ini secara tidak sengaja, tetapi tidak tahu cara menghapusnya.
Jichao
4
Tidakkah seharusnya, pertanyaannya adalah "Bagaimana cara menghapus direktori bernama '-p' di Linux dengan Bash"?
chepner
@ chepner: Karena mereka sebenarnya masalah yang sama. Saya mencoba menghapus direktori dengan rmdirtetapi gagal dengan kesalahan yang sama.
Jichao

Jawaban:

40

Sebagian besar utilitas (semua yang sesuai dengan POSIX kecuali untuk testdan echo) mendukung opsi "end of options" -- , sehingga Anda dapat menjalankan:

mkdir -- -p

Ini sangat berguna saat mengganti nama atau menghapus file yang berpotensi memulai dengan tanda hubung. Dalam skrip Anda harus selalu menggunakan

mv -- "$filename"

bukannya polos mv "$filename"atau, lebih buruk lagi, nama file yang tidak dikutip.

slhck
sumber
3
Luar biasa. Ini benar-benar baik untuk diketahui
Bruno9779
18

mkdir ./-p

Ingatlah bahwa sebagian besar program lain perlu menggunakan "trik" yang sama.

Daniel B
sumber