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:
mkdir -- -a
The --
berarti bahwa opsi berakhir setelah itu, sehingga -a
akan ditafsirkan secara harfiah dan bukan sebagai pilihan untuk mkdir
. Anda akan menemukan sintaks ini tidak hanya di mkdir
, tetapi setiap utilitas yang sesuai dengan POSIX kecuali untuk echo
dan test
. Dari spesifikasi :
Argumen - harus diterima sebagai pembatas yang menunjukkan akhir opsi. Argumen berikut harus diperlakukan sebagai operan, bahkan jika mereka mulai dengan karakter '-'. Argumen - tidak boleh digunakan sebagai opsi atau sebagai operan.
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:
mv -- "$f" new-"$f"
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 -
, misalnya mkdir ./-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
.
./
selalu merupakan ide yang bagus — bayangkan Anda membuat file yang dipanggil -rf
lalu Anda panggil rm *
.
--
tidak dimengerti oleh setiap perintah, hanya beberapa)
--
itu hal yang bash, jadi itu harus bekerja untuk semua program?
Alasan mengapa mkdir '-a'
, atau mkdir \-a
tidak berhasil adalah karena kedua metode ini (menggunakan tanda kutip atau garis miring terbalik) digunakan untuk mencegah shell Anda (kemungkinan bash
) memberi mereka arti khusus. Karena -a
tidak berarti sesuatu yang istimewa pada shell, ini tidak memiliki efek pada bagaimana ia diteruskan mkdir
.
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.
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.
--
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