Bash söz konusu olduğunda standart olmayan bir şekilde davranır -
.
POSIX diyor ki:
Yönerge 10: Seçenek bağımsız değişkeni olmayan
ilk --
bağımsız değişken, seçeneklerin sonunu belirten bir sınırlayıcı olarak kabul edilmelidir. Aşağıdaki argümanlar -
karakterle başlasalar bile işlenen olarak ele alınmalıdır .
[...]
Yönerge 13:
Okuma veya yazma amacıyla açılacak dosyaları temsil etmek için işlenen kullanan yardımcı programlar için, -
işlenen yalnızca standart girdi (veya bir çıktı dosyasının belirtildiği bağlamdan net olduğunda standart çıktı) veya adlı dosya -
.
Ve
POSIX.1-2017'nin Shell ve Utilities hacminde bu yönergelere uygun olarak tanımlanan bir yardımcı programın, işlenenin -
standart girdi veya çıktı anlamına gelmesini kabul etmesi ya da kabul etmemesi gerektiğinde , bu kullanım OPERANDS bölümünde açıklanmaktadır. Aksi takdirde, böyle bir yardımcı program dosyaları temsil etmek için işlenenler kullanıyorsa, işlenenin -
standart girdi (veya standart çıktı) mı yoksa adlı bir dosya mı olduğu uygulama tarafından tanımlanır -
.
Ama sonra man 1 bash
okur:
A --
seçeneklerin sonunu bildirir ve daha fazla seçenek işlemeyi devre dışı bırakır. Tarihinden sonraki tüm argümanlar --
dosya adı ve argüman olarak değerlendirilir. Argümanı -
ile eşdeğerdir --
.
Dolayısıyla Bash için -
ne standart girdi ne de dosya anlamına gelir, dolayısıyla bir şekilde standart değildir.
Şimdi özel durumunuz:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Ben şüpheli farkında olmayabilir bu komut yazarı -
eşdeğerdir --
bu durumda. Ben şüpheli yazar emin olmak istedim bash
standart giriş okuyacaktır, beklediklerinden -
kılavuz 13 uyarınca işe.
Ancak, talimatlara göre çalışsa bile, -
burada gereksiz olacaktır , çünkü bash
standart girişinin ne zaman bir boru olduğunu algılar ve buna göre hareket eder (verilmediği sürece -c
).
Yine -
de kılavuz ilkelere göre çalışmaz, gibi çalışır --
. Yine --
kendinden sonra başka argümanlar vardır çünkü burada gereksizdir.
Bence son -
hiçbir şey değişmez. Komut onsuz çalışır.
Genel olarak nasıl --
ve -
yararlı olabileceğini görmek için aşağıdaki örneği inceleyin.
cat
Benim Kubuntu'da hem yönergelere uyar ve ben faydasını göstermek için kullanacak -
ve --
.
Adlı bir dosya olsun foo
. Bu dosyayı yazdırır:
cat foo
Adlı bir dosya olsun --help
. Bu dosyayı yazdırmaz:
cat --help
Ancak bu, şu dosyayı yazdırır --help
:
cat -- --help
Bu, adlandırılan dosyayı --help
standart girdiden gelenlerle birleştirir :
cat -- --help -
Gerçekten ihtiyacınız yok gibi görünüyor --
, çünkü her zaman ./--help
bir dosya olarak yorumlanacak olanı geçebilirsiniz . Ama düşün
cat "$file"
değişkenin içeriğinin ne olduğunu önceden bilmediğinizde. Sadece başına geçemezsiniz ./
, çünkü bu mutlak bir yol olabilir ve ./
onu kıracaktır. Öte yandan adlı bir dosya olabilir--help
(çünkü neden olmasın?). Bu durumda --
çok faydalıdır; bu çok daha sağlam bir komut:
cat -- "$file"