SORU
10 Aralık 2012, PAZARTESİ


Bash kabuk komutunda tek tırnak içinde değişken genişleme script

Bir gelen bir komut çalıştırmak istiyorumkabuk betiği bashtek tırnak ve tek tırnak içinde başka bir komut ve değişken vardır.

repo forall -c '....$variable' ör

Bu biçimde, $ kaçtı ve değişkendir genişletilmiş değildir.

Aşağıdaki varyasyonlar denedim ama reddetti:

repo forall -c '...."$variable" '

repo forall -c " '....$variable' "

" repo forall -c '....$variable' "

repo forall -c "'" ....$variable "'"

Ben değişken yerine değeri yerine ise komut gayet güzel yürütülür.

Nerede yanlış gidiyorum bana söyle lütfen

CEVAP
10 Aralık 2012, PAZARTESİ


Tek tırnak içindeki her şey istisnasız korunur. Hatta tek tırnak kaçamazsın.

Tırnak kapatın, bir şey eklemek anlamına gelir, ve sonra tekrar girin tekrar.

'before'"$variable"'after'

'before'\''after'

'before'"'"'after'

Doğrulayabilirsiniz olarak, yukarıdaki satırların her biri sadece kabuk tek bir kelime. Dize birleştirme sadece yan yana tarafından yapılır. Tırnak boşluk ya da (non-bölme) değişkenler gibi şeyler farklı yorumlanması gerekliliğini göstermektedir. Alıntı iyi bir eğitim için de Mark Reed cevabı bakın.


Usulen dizeleri ve değişkenleri birleştirerek kabuk komutlarını bina kaçınmanız gerektiğini unutmayın. Bu kötü bir fikir çoğu programlama dilinde eval kullanarak veya SQL istekleri (SQL enjeksiyon!) binaya benzer.

Genellikle olanaklıdır tutucular komutu ve tedarik komutu ile birlikte değişkenler böylece aranan olabilir yerine yer tutucular güvenli bir şekilde yerine arayanın dizeleri bitiştirmek, böylece karıştırma Kodu ve veri.

Örneğin, bir kabuk çalıştırmak için bir dış kabuk: bir bağımsız değişken komut

myvar=foo
/bin/sh -c 'echo "argument 1 is: $1"' -- "$myvar"

Öte yandan, şu çok güvenli değildir. BUNU YAPMA

myvar='foo"; rm -rf /mypreciousdata; echo "you were hacked'  # exploit
/bin/sh -c "echo \"Argument 1 is: $myvar\""

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Россия

    Google Ро

    9 Temmuz 2007
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009