(eğer bash
4 kullanıyorsanız, ben saf kabuk ve okunabilirliği en iyi kombinasyonu olduğunu düşünüyorum ne için sonuna kadar ilerleyin.) Kabuk komut dosyaları için
, sekmeleri kullanarak tercihi veya stil meselesi değildir; dil nasıl tanımlanır.
usage() {
# Lines between EOF are each indented with the same number of tabs
# Spaces can follow the tabs for in-document indentation
cat <<-EOF
Hello, this is a cool program.
This should get unindented.
This code should stay indented:
something() {
echo It works, yo!;
}
That's all.
EOF
}
Diğer bir seçenek tırnak ve hat continuations daha kullanmak zorunda pahasına, tamamen burada belgeyi kaçınmaktır: POSIX uyumluluğu vazgeçmek isteyen varsa
usage() {
printf '%s\n' \
"Hello, this is a cool program." \
"This should get unindented." \
"This code should stay indented:" \
" something() {" \
" echo It works, yo!" \
" }" \
"That's all."
}
, bir kullanabilirsiniz aşağıdaki bir buraya DOCUME kullanır
usage() {
message=(
"Hello, this is a cool program."
"This should get unindented."
"This code should stay indented:"
" something() {"
" echo It works, yo!"
" }"
"That's all."
)
printf '%s\n' "${message[@]}"
}
: dizi açık hat devamlılık önlemek için nt tekrar, ancak bu sefer bir dizi doldurmak için komutuyla. Parametre genişletme, her bir yalanın başlangıcından sabit sayıda boşluğun kaldırılmasına özen gösterir.
usage() {
# No tabs necessary!
readarray message <<' EOF'
Hello, this is a cool program.
This should get unindented.
This code should stay indented:
something() {
echo It works, yo!;
}
That's all.
EOF
# Each line is indented an extra 8 spaces, so strip them
printf '%s' "${message[@]# }"
}
Son bir değişiklik: parametre genişletmeyi basitleştirmek için genişletilmiş bir desen kullanabilirsiniz. Girinti için kaç alanın kullanıldığını hesaba katmak yerine, sadece boşluk olmayan bir karakterle girintiyi sonlandırın, ardından sabit önekle eşleştirin. :
kullanıyorum. ( 'u izleyen boşluk, okunabilirlik içindir; önek şablonuna küçük bir değişiklikle bırakılabilir.)
(Ayrıca, bir belgeyi kullanarak, burada bir belgeyi kullanmanın çok güzel bir hilesidir. Bu boşluk ile başlıyor, buradaki dokümanın içinde genişletme yapmanıza engel oluyor olmasıdır.Bunu yapmak isterseniz, sınırlayıcıyı geçersiz kılmanız ya da sekme kuralınız için küçük bir istisna yapmanız ve <<-EOF
'u kullanmanız gerekir. ve sekme girintili kapatma ayraç.) Bu, biraz daha farklı bir yaklaşım
usage() {
# No tabs necessary!
closing="That's all"
readarray message <<EOF
: Hello, this is a cool program.
: This should get unindented.
: This code should stay indented:
: something() {
: echo It works, yo!;
: }
: $closing
EOF
shopt -s extglob
printf '%s' "${message[@]#+(): }"
shopt -u extglob
}
Hayır, burada okunaklı bir programlama soru. Kontrol ettiğin için teşekkürler. –
Bu, bunu yapmanın iyi, açık ve anlaşılır bir yolu gibi görünüyor. Başka yollar bilmiyorum. Daha fazla oy aldığımda bunu söyleyeceğim, belki birisi ilginç bir şey biliyordur. –
Ow, hoş bir çözüm! Maalesef diğer birçok dilde mümkün değil, kodların girintilemesini zorlaştırıyor. – Kenney