Bayrak olarak adlandırılan bir dosyayı nasıl yapacağımı merak ediyordum, örneğin, bir klasör yapmak isteseydim -a
, hangi komutları yapardı?
Denedim mkdir '-a'
, mkdir \-a
ve ne çalıştı. Ubuntu'dayım.
Bayrak olarak adlandırılan bir dosyayı nasıl yapacağımı merak ediyordum, örneğin, bir klasör yapmak isteseydim -a
, hangi komutları yapardı?
Denedim mkdir '-a'
, mkdir \-a
ve ne çalıştı. Ubuntu'dayım.
Yanıtlar:
Komutu şöyle çağır:
mkdir -- -a
--
Böylece araç seçenekleri, bundan sonra son vermesini -a
bir seçenek olarak tam anlamıyla değil yorumlanır alır mkdir
. Bu sözdizimini yalnızca içinde değil mkdir
, echo
ve dışında herhangi bir POSIX uyumlu yardımcı programda bulacaksınız test
. Şartnameden :
Argüman - seçeneklerin sonunu belirten bir sınırlayıcı olarak kabul edilmelidir. Aşağıdaki argümanlar '-' karakteriyle başlasalar bile, operand olarak değerlendirilmelidir. - argümanı bir seçenek olarak veya bir işlenen olarak kullanılmamalıdır.
Kullanılması --
alan güvenlik Eğer dosya adları ile anlaşma ve emin onlar komutu bozmazlar yapmak istiyorum hemen her eylem için tavsiye edilir gibi bir döngü içinde dosyaları taşırken, örneğin bir dosya adı verilen böylece aşağıdakileri aramak istersin -i
' değil mi t (in?) bir seçenek olarak doğru ayrıştırıldı:
mv -- "$f" new-"$f"
cc -o -myfile -Wall -myfile.c
Sadece biraz tartışmalı bir örnek olarak alın . Tuzuna değecek herhangi bir editör, -myfile.c
isterseniz adlandırılmış bir dosyaya kaydedebilmelidir , ancak C derleyicisi muhtemelen böyle bir seçenek listesi verildiğinde istediğinizi yapmaz.
cc
sahip, yukarıda verilen komut gibi, bir girdi veya çıktı dosya adı belirleme seçeneği gerektiren komutlar -o
.
for f in ./*; do...
yerine bir şey kullanmanız gerektiğidirfor f in *; do...
Makul bir programla çalışması gereken en basit yol, önünde geçerli bir yol adı kullanmaktır -
; örneğin , geçerli çalışma dizininde mkdir ./-a
adı verilen bir dizin oluşturur -a
.
Bu "numarayı" kullanmanın en yaygın örneği bir çizgi ile başlayan bir dosyayı kaldırmak istediğinizde, böylece yapabilirsiniz rm ./-a
.
./
her zaman iyi bir fikirdir - bir dosya oluşturduğunuzu -rf
ve daha sonra aradığınızı hayal edin rm *
.
--
her komutta anlaşılmayan, sadece birkaçı)
--
Bir bash şey olduğunu düşündüm , bu yüzden tüm programlar için çalışması gerekir?
Nedeni mkdir '-a'
, ya mkdir \-a
(tırnak veya ters eğik çizgi kullanarak) bu yöntemlerin her ikisi senin önlemek için kullanılır çünkü does not iştir kabuğu (muhtemelen bash
onlara herhangi bir özel anlam vermekten). Yana -a
ortalama şey özel Neyse kabuğuna değil, bu o geçirilir alır nasıl etkisi yoktur mkdir
.
Kadarıyla şöyle mkdir
ilgilidir, bu kabuğundan bağımsız değişkenlerin bir listesini alır ve bir ters eğik çizgi vardı, yoksa tırnak koyun ya da olmasın bunu söylemek mümkün değil. Sadece bir argüman görür -a
. Bu yüzden --
diğer cevaplarda açıklandığı gibi ihtiyacın var .
"Slhck" in cevabına ek olarak, bazen işe yarayan başka bir numara var:
Söz konusu dosya adını, "'-a'"
veya gibi 2 farklı (farklı) qout kümesine yerleştirin '"-a"'
.
Bunun işe yarayıp yaramadığı programa bağlıdır, ancak program POSIX --
özelliğini desteklemiyorsa son çaredir .
POSIX yöntemi her zaman% 100 güvenilir olduğu için tercih edilir.
--
Seçenek işlemeyi sonlandırmak için kullanmak , aynı zamanda her zaman geçerli olmayan dosya adını takip etmek için hiçbir seçeneğe ihtiyacınız olmadığını varsayar.
'-a'
ya da "-a"
en azından BSD tipi sistemlerde