2016-03-23 16 views
0

Bu çalıştı. Nasıl başarabilirim? Burada bu komut dosyası için :Bash'taki alıntılar nasıl kaçar?</p> <pre><code>a=""Google Chrome"" </code></pre> <p>ve ben <pre><code>a="'Google Chrome'" </code></pre> <p></p> ama hiçbir gitmek çalıştı:

birthBrowser(){ 
    local a 
    if [ $# -eq 0 ] 
    then 
     a="Google Chrome" 
    fi 
    if [ $# -eq 1 ] 
    then 
     a="$1" 
    fi 
    if [ $# -gt 1 ] 
    then 
     a="$1" 
     echo "Too many arguments" 
    fi 
    open -a $a 
} 

bir argüman olarak "Google Chrome" tedavi yalnızca Chrome bölümünü okuyup değil tutmak gibi görünüyor.

Örneğin, konsolda open -a "Google Chrome" çalışır.

+0

Bu soru burada yanıtladı: http://stackoverflow.com/questions/35586627/how-to-escape-double-quotes-in-bash – Dustin

+1

Aktarılan alıntılar, sözdizimini değil, veri yapar. Tam anlamıyla tırnak işareti, açık komut tarafından veri olarak ele alınmasını istemediğiniz sürece (ki size söz veriyorum, siz), ** ** tırnakların kaçmasını istemezsiniz. Bunun yerine, genişlemeden kaçmalısın. –

+1

@theman, istediğini yapar; Bu sadece ** istediğin şey değil **. Nasıl yapılacağını sorduğun alıntılardan kaçar, ama eğer 'open''in doğru şekilde çalışmasını istiyorsanız, o tırnaklar ** ** kaçmamalı. –

cevap

1

sizin amaçlanan davranış, bu aynı olduğunda:

open -a "Google Chrome" 

... sonra metne kullanımı bu gibi görünmelidir:

a="Google Chrome" 
open -a "$a" 

söz konusu olduğu kullanımlarda, tüm tırnak sözdizimsel vardır Eğer tırnakları bir dizgenin parçası olarak tam anlamıyla kaçarsanız, o zaman veri haline gelirler ve özel anlamlarını sözdizimi olarak kaybederler.

Sözdizimsel alıntılardan kaçmaya çalışmak için neden hatalı bir açıklama yapıldığının ayrıntılı açıklaması için BashFAQ #50'a bakın.

+0

Bu çok mantıksız çünkü 1970'lerde tasarlanan bir şeyle geriye dönük olarak uyumlu. UNIX'e hoş geldiniz. –

+0

Bourne. Bourne ile * tamamen * geriye dönük olarak uyumlu değil - 90'lı yılların başlarında POSIX sh standardı, '^' karakterini bir boru karakteri olarak kabul etmeyi reddetti - ancak sınırlı bir istisna grubuyla. –

+0

Gerçekten. Bash, POSIX sh'in bir üst kümesidir (çoğunlukla, öntanımlı olarak "echo" özellikleri gibi birkaç küçük parçayı keser); Diğer bir deyişle, adın * şirin * olması için * doğru * seçildiğini söylemek gerekir. –