Bash'ta çift tırnak arasında “!” Sembolü nasıl yazılır? [çift]


0

Bu sorunun zaten burada bir cevabı var:

Nasıl yazılacağını çözemiyorum ! bash betiğindeki sembol çift tırnaklı dizelere yerleştirilir.

Örneğin:

var="hello! my name is $name! bye!"

Aşağıdaki komutları yazarsam çılgınca bir şey olur:

$ age=20
$ name='boda'
$ var="hello! my name is $name! bye!"

Son komutta enter tuşuna bastığımda, komut sonuncusu olmadan kendisini tekrar eder (kendisini yazar) !:

var="hello! my name is $name! bye"

Eğer tekrar basarsam:

$ var="hello! my name is $name bye"

Enter tuşuna tekrar basarsam kaybolmaz hiçbir şey çıkmaz:

$ 

Bunu denersem:

$ echo "hello\! my name is $name\! bye\!"

Sonra çıktılar: hello\! my name is boda\! bye\!

Tek tırnak kullanırsam, adım genişlemiyor:

$ echo 'hello! my name is $name! bye!'

Çıktılar: hello! my name is $name! bye!

Bu şekilde çalışmasını sağladım:

$ echo "hello"'!'" my name is $name"'!'" bye"'!'

Ama bu büyük bir karmaşa " ve ' anlamak / düzenlemek / sürdürmek / güncellemek imkansız.

Biri yardım edebilir mi?


@Hastur no! $name genişlemiyor!
bodacydo

Üzgünüm, sorununuzu çoğaltamıyorum. Şimdi bilgisayardayım ve ilk üç adımdan sonra yazarsam echo $var bana cevap veriyor hello! my name is boda! bye!. Yazmadığından emin misin? var="hello! my name is $name! bye" !! ?
Hastur

görüyorum bu Yeni bir Terminal penceresinde, bu 3 komutu çalıştırdıktan sonra, @Hastur. (Ve bu Google klasörü şu an bulunduğum klasör değil, ben yap Terminal pencereleri arasında komut geçmişini senkronize et.)
Arjan

Kabuk genişlemesiyle ilgili gibi görünüyor ... @bodacydo 1. küçük bir betiğe 3 satır + echo $ var yazın ve uygulayın. 2. Yeni bir kabuk yaz echo hi gir ve sonra !! girmek. Çalıştırmadan önce genişletip genişletmediğini kontrol edin. Olabilir set +o histexpand yardım edebilir.
Hastur

1
çift: unix.stackexchange.com/q/246170/4667 ve stackoverflow.com/q/33980965/7552 - aynı soruyu birden fazla siteye göndermeyin
glenn jackman

Yanıtlar:


0

Bu şekilde yaparsanız, kodunuzu okumak daha kolay olacaktır:

:~$ name='boda'
:~$ var="hello! my name is $name! bye!" && echo $var
hello! my name is boda! bye!
  • && - 2. komut echo $var sadece 1. komut çalıştırılırsa çalıştırılır var="hello! my name is $name! bye!" başarılı olur.

  • :~$ - Bu örnekte yazılmamıştır çünkü bash komutunu belirtir.

  • ! - Kaçmana gerek yok ! Yukarıdaki komutta bir çift alıntı karakterinin içinde olduğu için.


Bunun neden durduğunu anlamadım. bash geçmişi genişlemesi . Benim için yukarıdakileri yapıştırmak beni alır bu Terminal pencereleri arasında komut geçmişini paylaşıyorum, böylece taze bir Bash örneği bile bazı geçmişleri bulabiliyor. Sadece kullanarak set +H kopyada önerildiği gibi bunu durdurur.
Arjan

Onun sorusu ile etiketlendi linux etiket, bu yüzden cevabımdaki örnek Linux'ta Ubuntu 14.04 (gnome-terminal) ile çalıştırıldı. gördüm MacOS Ekran görüntüsünüzdeki dizin, ekran görüntüsünün bir Mac bilgisayardan alınmış olup olmadığından veya bunun aynı komutu iki farklı bilgisayarda çalıştırmanın iki farklı sonucu almasıyla bir ilgisi olup olmadığından emin değilim.
karel

Sadece tırnak işaretleri de dahil olmak üzere, "/some/dummy/command", Enter tuşuna basın ("Böyle bir dosya veya dizin yok" olacak) ve ardından yukarıdaki adımları tekrarlayın.
Arjan

Ayrıca, sadece yazarak !" ve Enter’a basmak, o aptal komutu tekrardan verir. Tarih genişletiyor.
Arjan

1
Bahsettiğiniz yukarıdaki adımları tekrarladım ve yine cevabımdakiyle aynı çıktıyı aldım. Gnome-terminalinde bash'ı 14.04 Ubuntu'da kullanıyorum. Gnome-terminalim, gnome-terminal pencere boyutu ve renk şeması için ayarları değiştirmek dışında tüm varsayılan ayarlara sahiptir.
karel
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.