Saya bertanya-tanya bagaimana cara membuat file bernama bendera, misalnya, jika saya ingin membuat folder bernama -a
, perintah apa yang akan melakukan trik?
Saya mencoba mkdir '-a'
,, mkdir \-a
dan tidak ada yang berhasil. Saya di Ubuntu.
Saya bertanya-tanya bagaimana cara membuat file bernama bendera, misalnya, jika saya ingin membuat folder bernama -a
, perintah apa yang akan melakukan trik?
Saya mencoba mkdir '-a'
,, mkdir \-a
dan tidak ada yang berhasil. Saya di Ubuntu.
Jawaban:
Panggil perintah seperti ini:
The
--
berarti bahwa opsi berakhir setelah itu, sehingga-a
akan ditafsirkan secara harfiah dan bukan sebagai pilihan untukmkdir
. Anda akan menemukan sintaks ini tidak hanya dimkdir
, tetapi setiap utilitas yang sesuai dengan POSIX kecuali untukecho
dantest
. Dari spesifikasi :Menggunakan
--
sebagai pengamanan dianjurkan untuk hampir semua tindakan di mana Anda berurusan dengan nama file dan ingin memastikan mereka tidak melanggar perintah, misalnya ketika memindahkan file dalam satu lingkaran, Anda mungkin ingin memanggil yang berikut, sehingga file bernama-i
isn ' t (dalam?) diurai dengan benar sebagai opsi:sumber
cc -o -myfile -Wall -myfile.c
sebagai contoh yang hanya sedikit dibuat-buat. Editor mana pun yang layak diberi garam harus dapat menyimpan ke file bernama-myfile.c
jika Anda memintanya, tetapi kompiler C mungkin tidak akan melakukan apa yang Anda inginkan ketika diberi daftar opsi seperti itu.cc
perintah yang Michael berikan di atas, yang memiliki-o
opsi untuk menentukan file output.for f in ./*; do...
daripadafor f in *; do...
Cara paling sederhana yang harus bekerja dengan program yang masuk akal adalah dengan menggunakan nama jalur relatif di depan
-
, misalnyamkdir ./-a
akan membuat direktori yang disebut-a
dalam direktori kerja saat ini.Contoh paling umum menggunakan "trik" ini adalah ketika Anda ingin menghapus file yang dimulai dengan tanda hubung, sehingga Anda dapat melakukannya
rm ./-a
.sumber
./
selalu merupakan ide yang bagus — bayangkan Anda membuat file yang dipanggil-rf
lalu Anda panggilrm *
.--
tidak dimengerti oleh setiap perintah, hanya beberapa)--
itu hal yang bash, jadi itu harus bekerja untuk semua program?Alasan mengapa
mkdir '-a'
, ataumkdir \-a
tidak berhasil adalah karena kedua metode ini (menggunakan tanda kutip atau garis miring terbalik) digunakan untuk mencegah shell Anda (kemungkinanbash
) memberi mereka arti khusus. Karena-a
tidak berarti sesuatu yang istimewa pada shell, ini tidak memiliki efek pada bagaimana ia diteruskanmkdir
.Sejauh
mkdir
menyangkut, ia menerima daftar argumen dari shell, dan itu tidak bisa mengatakan apakah Anda memasukkannya ke dalam tanda kutip atau tidak, atau apakah ada backslash. Itu hanya melihat satu argumen-a
. Itu sebabnya Anda perlu--
seperti yang dijelaskan dalam jawaban lain.sumber
Selain jawaban dari "slhck" ada trik lain yang kadang-kadang berfungsi:
Masukkan nama file dalam 2 set qoutes (berbeda) seperti
"'-a'"
atau'"-a"'
.Apakah ini berfungsi atau tidak tergantung pada program, tetapi ini merupakan pilihan terakhir jika program tidak mendukung
--
fitur POSIX .Metode POSIX selalu disukai karena 100% dapat diandalkan.
sumber
--
untuk menghentikan pemrosesan opsi juga mengasumsikan bahwa Anda tidak memerlukan opsi apa pun untuk mengikuti nama file, yang tidak selalu demikian.'-a'
atau"-a"
, setidaknya pada sistem tipe BSD