İçindeki bir komutla bir cümleyi nasıl devam ettirirsin


12

Örneğin, senaryo dosyamda "Şu anda çevrimiçi 10 kişi var" demeye çalışıyorum.

Bir sonraki satırda "Şu anda çevrimiçi insanlar" bölümü olmadan komutun çalışmasını asla sağlayamıyorum.

Şu anda sahibim

w='who | wc -l' 
echo "There are $w people online at the moment" 

Ancak, her zaman çıktı ile sonuçlanırım

There are who | wc -l users online at the moment 

Komutun ortada çalışmasını nasıl sağlıyorsunuz? Örneklere bakmaya ve kopyalamaya çalışıyorum, ancak komut değiştirme sorunuma yardımcı olmuyor gibi görünüyor.

Yanıtlar:


20

Çıktısını istiyorsun

who | wc -l

atanan wnedeniyle etrafında tırnak ne elde olduğunu dize değil. Komut yerine koymayı kullanmalısınız $(...):

w=$(who | wc -l)
echo "There are $w people online at the moment"

(arka tırnakları da kullanabilirsiniz, ancak bunları kolayca iç içe yerleştiremezsiniz).


Bash dahil olmak üzere bazı kabuklarda geri tırnaklar iç içe yerleştirebilirsiniz. Yuvalanmış kaçışlar gerektirir, stackoverflow.com/a/2657037/776723
ShadSterling

1
@Polerjik Teşekkürler. Cevabımı güncelledim, ama sanırım $()kendimi iç içe geçireceğim ;-)
Anthon

10

Başka bir çözüm:

echo There are $(who | wc -l) people online at the moment


5

komutu yürütmek için backtick kullanmalısınız

w=`who | wc -l` echo "There are $w people online at the moment"



7
Geçerli nokta. "Backtick de kolayca tek bir alıntı ile karıştırılır." tam olarak burada ne oldu.
Ghanima

@Ghanima: Gerçekten! Bu soru, geri tepmelerin neden kaçınılması gerektiğini göstermemiz gerektiğinde harika bir örnektir. :)
PM 2Ring

Güzel, sadece bu cevabı iptal ettim çünkü OP'nin tam olarak nerede hata yaptığını açıklayan tek cevap bu . Geri tepmelerin iyi ya da kötü olup olmadığı sadece yan notlar.
Ruslan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.