Bash'e satırın sonraki satırda devam ettiğini nasıl anlarım?


Yanıtlar:


136

Karakter ters eğik çizgidir \

Gönderen bash kılavuzu :

Ters eğik çizgi karakteri '\' okunan bir sonraki karakter ve satırın devamı için herhangi bir özel anlamı kaldırmak için kullanılabilir.


Teşekkürler. ve bir bash betiğinin sütunlarında olağan sınır nedir?
yolu açın

bash'nin ilginç bir sütun sınırı yoktur; netlik için sütun başına 70-80 karakterle sınırlandırmaya çalışmalısınız.
Habbie

10
@RyanM Ters eğik çizgi, satır sonundan önceki son karakter olmalıdır. \ İşaretinden sonra boşluk olmadığından EMİN misiniz?
George

9
@George Evet. Biraz daha kurcalamak, bir ^M. Sorun, komut dosyasının bana pencereleri kullanan biri tarafından verilmiş olması gibi görünüyor. Hızlı bir dos2unix:) o sabit
RyanM

2
@George yorumunuz beni kurtardı, \ 'dan sonra boşluk bıraktım ve neyin yanlış olduğunu anlayamadım. Şerefe!
2013

39

Genel olarak, komutun bir sonraki satıra devam etmesi için satırın sonunda ters eğik çizgi kullanabilirsiniz. Bununla birlikte, komutların örtük olarak devam ettiği, yani satırın bir komutu yasal olarak sona erdiremeyen bir belirteçle bittiği durumlar vardır. Bu durumda, kabuk daha fazlasının geldiğini bilir ve ters eğik çizgi atlanabilir. Bazı örnekler:

# In general
$ echo "foo" \
> "bar"
foo bar

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar

Farklı, ancak ilgili, alıntıların içindeki örtük devamıdır. Bu durumda, ters eğik çizgi olmadan , dizeye yeni bir satır eklemeniz yeterlidir.

$ x="foo
> bar"
$ echo "$x"
foo
bar

Ters eğik çizgi ile mantıksal çizgiyi birden çok mantıksal satıra bölüyorsunuz.

$ x="foo\
> bar"
$ echo "$x"
foobar

Bir komutun dolaylı olarak sonraki satırda devam ettiği bu tür durumların resmi bir listesi var mı? Öyle bir dahilinde belirli durumlarda ters eğik çizgi dışında bırakmak olabilir geliyor bana [[- ]]ama diğerlerinde, durum, ve ben kurallara dışarı şekil çalışıyorum.
Menachem

16

\işi yapar. @ Guillaume'un yanıtı ve @ George'un yorumu bu soruyu açıkça yanıtlıyor. Burada neden The backslash has to be the very last character before the end of line character.bu komutu dikkate aldığımı açıklıyorum :

   mysql -uroot \
   -hlocalhost      

Sonrasında boşluk varsa \satır devamı çalışmayacaktır. Bunun nedeni, \ görünmez satır besleme karakteri değil, boşluk olan bir sonraki karakter için özel anlamı ortadan kaldırmasıdır. Satır besleme karakteri, \bu örnekte olmayan boşluktan sonradır .


2
"Son karakter" kısmına işaret ettiğiniz için teşekkür ederiz. Tam olarak bu hatayı takip ederken biraz hayal kırıklığına uğradım.
Jason
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.