Komut satırı bağımsız değişkenleri, sistemin komut kabuğu tarafından yorumlanır, komutun davranışını değiştirir veya bağımsız değişkenlerin çağrılan programa aktarılmadan önce değerini değiştirir.
Bir bağımsız değişken (değeri gibi --password
) kabuğun yorumlayabileceği bir karakter içerdiğinde, bunların tırnak içine alınması (genellikle unix'te tek tırnak içine alınması '
veya "
Windows'ta çift tırnak içine alınması ) veya ayrı ayrı (genellikle \
her meta karakterden önce ters eğik çizgi ile) verilmesi gerekir. ) kabuk tarafından yorumlanmasını önlemek için.
Belirli karakterler sisteme özgü olsa da, dikkat edilmesi gereken bazı karakterler şunlardır:
$ & ! \ [ ] < > `
Parola, gerçekten kötü bir örnek için pa$$word
...
mysql --password=pa$$word # does not work
mysql --password='pa$$word' # works
mysql --password=pa\$\$word # works, but slightly unclear what's going on at first glance
Daha fazla okuma:
Güncelleme: şifredeki '
tek veya "
çift tırnaklardan kaçmak için, önde gelen bir ters eğik çizgiyle kaçabilir veya seçilen alıntı stilinin uyumlu olmadığı başka bir karakter yoksa, argümanın tamamını ters tırnak içine alabilirsiniz. ile.
mysql --password="like'this" # password has a single quote in the middle
mysql --password='like"this' # password with a double quote in the middle
Tek bir alıntı ve diğer özel karakterleriniz varsa, ters eğik çizgiden kaçarsınız, çünkü unix'te çift tırnak tek bir alıntıdan "daha zayıftır" ve çift tırnak içine alındığında birçok meta karakter hala genişler, ancak tek tırnak içine alınmaz tırnak.
Bu MySQL'e özgü değildir, ancak komut satırı bağımsız değişkenleri olan her şey için geçerlidir.
echo
Kabuğun bağımsız değişkenlerinizi nasıl yorumladığını görmek için genellikle komutu kullanabilirsiniz .
$ echo foo$bar
foo # literal 'foo' plus the (empty) shell variable $bar
$ echo foo\$bar
foo$bar # backslash prevents expansion of $bar as a variable
$ echo "foo$$bar" # weaker double quote doesn't prevent expansion so
foo9691bar # the $$ expands to the unix process id (pid) of the current shell
$ echo 'foo$$bar'
foo$$bar # "stronger" single quote prevents shell expansion
$ echo "foo'bar"
foo'bar # double quote allows single quote within the literal
Takip: Bash kabuğu (ve muhtemelen bazı diğerleri), konvansiyon tuhaf olsa da (muhtemelen zamanın sislerinde kaybedilen uzun zamandır unutulmuş bir karara dayanarak) tek tırnaklı dizelerde tek tırnaklardan kaçmaya izin verir:
Dizenin tamamını tek tırnak '
içine '\''
almadan önce dizenin her birini yerine koyun ... Böylece değişmez dize foo'bar
olarak ifade edilir 'foo'\''bar'
.
Dediğim gibi tuhaf. Bu gereklidir, çünkü bir ters eğik çizgi tek tırnaklı bir dizenin dışında tek bir tırnaktan kaçar, ters eğik çizgi bash içindeki tek tırnaklı bir dizenin içinde hiçbir şeyden kaçmaz ve tek tırnaklı dizeler kaçınılmaz olmadığı sürece birden fazla tek tırnakla kapatılıp yeniden açılabilir özel anlamı olan araya giren karakterler. Böylece '\''
, dizenin alıntısını kapatır, sonra kaçan değişmez değeri sağlar, sonra dizenin alıntısını yeniden açar.