(आप bash
4 का उपयोग कर रहे हैं, तो मैं क्या सोचता शुद्ध खोल और पठनीयता का सबसे अच्छा संयोजन है के लिए अंत करने के लिए स्क्रॉल करें।)
शेल स्क्रिप्ट के लिए, टैब का उपयोग कर वरीयता या शैली की बात नहीं है, इस तरह भाषा परिभाषित की जाती है।
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
}
एक अन्य विकल्प अधिक उद्धरण और लाइन निरंतरता का उपयोग किए की कीमत पर पूरी तरह एक यहाँ दस्तावेज़ से बचने के लिए, यह है:
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."
}
आप POSIX अनुकूलता त्याग करने को तैयार हैं, तो आप एक का उपयोग कर सकते
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[@]}"
}
निम्नलिखित यहां docume का उपयोग करता है: सरणी स्पष्ट लाइन निरंतरता से बचने के लिए एनटी फिर से, लेकिन इस बार bash
4 के readarray
आदेश के साथ एक सरणी पॉप्युलेट करने के लिए आदेश। पैरामीटर विस्तार प्रत्येक झूठ की शुरुआत से रिक्त स्थान की एक निश्चित संख्या को हटाने का ख्याल रखता है।
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[@]# }"
}
एक आखिरी भिन्नता: आप पैरामीटर विस्तार आसान बनाने के लिए एक विस्तारित पैटर्न का उपयोग कर सकते हैं। इंडेंटेशन के लिए कितनी रिक्त स्थान का उपयोग किया जाता है, इसकी गणना करने के बजाय, बस एक चयनित गैर-स्पेस वर्ण के साथ इंडेंटेशन को समाप्त करें, फिर निश्चित उपसर्ग से मेल खाते हैं। मैं :
का उपयोग करता हूं। यहां-डॉक सीमांकक का उपयोग कर के अपने बहुत अच्छी चाल को एक अलग रूप में, एक दोष के रूप में,
(इसके अलावा, (यह उपसर्ग पैटर्न के लिए एक मामूली परिवर्तन के साथ छोड़ा जा सकता है अंतरिक्ष निम्नलिखित बृहदान्त्र पठनीयता के लिए है।) जो व्हाइटस्पेस के साथ शुरू होता है यह है कि यह आपको यहां-डॉक के अंदर विस्तार करने से रोकता है। अगर आप ऐसा करना चाहते हैं, तो आपको या तो डिलीमीटर को अनइंडेंट छोड़ना होगा, या अपने नो-टैब नियम में एक मामूली अपवाद बनाना होगा और <<-EOF
का उपयोग करना होगा और एक टैब इंडेंट समापन सीमांकक।)
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
}
नहीं, यह एक प्रोग्रामिंग सवाल है, इसे यहाँ कानूनी है। जांच के लिए धन्यवाद। –
यह ऐसा करने के लिए एक अच्छा, स्पष्ट, सीधा तरीका लगता है। ऑफहेड के अन्य तरीकों को नहीं जानते। जब मैं अधिक वोट प्राप्त करता हूं, तो मैं इसे उखाड़ दूंगा, शायद कोई दिलचस्प कुछ जानता है। –
ओउ, अच्छा समाधान! दुर्भाग्यवश अधिकांश अन्य भाषाओं में संभव नहीं है, कोड के इंडेंटिंग ब्लॉक को मुश्किल बनाते हैं। – Kenney