2010-02-19 17 views
5

Bir bash betiği için uygun girinti nedir? Bir java/C++ maymunu olarak, benim koduma dini olarak giriyorum. Ama bu kodu girinti izin verilmez görünüyor: Bash betikleri için uygun girinti nedir?

#! /bin/bash 

if [ $# = 0 ] 
then 
     # there was no arguments => just do to standard output. 
     echo "there are no parameters" 
else 
cat << EOF 
========================================================== 
========================================================== 
========================================================== 
========================================================== 
DESCRIPTION: 

$1 
---------------------------------------------------------- 

EOF 
fi 

o EOF tanımadığı girintili zaman ve sadece (kafa karıştırıcı) EOF girintilendirilmedi eğer girintili yazdırır.

S: Başyazı betikleri için uygun girinti nedir?

+0

Çoğu programlama dilleri (burada belgeler üzerinde bash man sayfasına bakınız), "girinti" olabilir. Bu gerçekten bash'a özgü değil. –

cevap

18

Bash (3.2 en az) ve ksh (diğerleri hakkında bilmediğiniz) ile <<- kullanarak belgeyi girebilirsiniz ve önde gelen sekmeler (yalnızca boşluk değil, sekmeler), örn.

if [...]; then 
    cat <<-EOF 
     some text 
    EOF 
fi 
+2

bilmek gereklidir başka şeyler olduğunu başlayan sınırlayıcı alıntı burada-belgenin genişleme (parametresini, komut, vs.) önlediğini: 'foo << "EOF" 've kombine edilebilirler: foo << -" EOF "'. İkincisi, kod bloklarını yorumlamak için yararlıdır (no-op ':' alma komutu olarak kullanabilir veya atlayabilirsiniz). Ayrıca, '<< -' kullanırken, kapanış sınırlayıcısını (veya herhangi bir satırı, gerçekten) girip girmeyeceğinizi seçebilirsiniz. –

+0

Diğer cevaba yaptığım yorumu görün, bu belgenin son belirtecini giremezsiniz. – haridsv

+0

, "tire" da çalışır. –

2

Bu bir bash girinti sorunu değil, bu bir dosya-sorunudur. Eğer << sonra belirttiğiniz etiket, yani EOF, lider veya boşlukları sondaki olmadan bir çizgide yalnız görünmelidir.

Buraya ait dosyanın kendisi için, girilmiş, girintili olarak kullanılır.

+0

bir çözüm var _is_ ('<< -'), diğer yanıtları görmek –

-1

Mouviciel doğrudur.

Girintiyi korumak istiyorsanız, buraya dosya metni ayrı bir dosyaya koyabilirsiniz. Ancak, ikame işlemini kendiniz halletmelisiniz.

4

evet <<- kullanarak heredoc Girintiyi sorunları var özelliği

if [ $# = 0 ] 
then 
     # there was no arguments => just do to standard output. 
     echo "there are no parameters" 
else 
    cat <<-EOF 
    ========================================================== 
    ========================================================== 
    ========================================================== 
    ========================================================== 
    DESCRIPTION: 

    $1 
    ---------------------------------------------------------- 
    EOF 
fi 
+0

+1. Bu özelliği bilmiyordum! – mouviciel

+1

Bu biraz yanlış, bu belgenin son belirteci yine de girintili olamaz. Aslında buradaki belgelerle ilgili en büyük yakınlığım, yalnızca önde gelen sekmeleri çıkarmalarıdır (girintili 2 boşluk isterim) ve yine de son işaretleyiciyi giremeyebilirsiniz. – haridsv

+1

@haridsv aslında ** kutu ** girinti GNU bash 4.3.11' ve 'çizgi 0.5.7' –

İlgili konular