Bu çok satırlı bir yorum değil. #
tek satırlı bir yorumdur.
:
(iki nokta üst üste) , hiçbir şekilde bir yorum değildir, daha ziyade, temelde bir NOP olan, kabaca bir komuttur, aslında geri dönüş dışında hiçbir şey yapmayan boş bir işlemdir true
(ve $?
yan etki olarak 0'a ayarlanmıştır ). Ancak bir komut olduğu için, argümanları kabul edebilir ve argümanlarını görmezden geldiğinden, çoğu durumda yüzeysel olarak bir yorum gibi davranır. Bu çamurla ilgili temel sorun, argümanların hala genişlediğinden, istenmeyen sonuçlara yol açıyor. Argümanlar hala sözdizimi hatalarından etkilenir, yönlendirmeler hala gerçekleştirilir, böylece : > file
kısaltılır file
ve : $(dangerous command)
değişimler devam eder.
Kabuk betiklerine yorum eklemek için en az şaşırtıcı tamamen güvenli yol şudur #
. Çok satırlı yorumlar için bile buna bağlı kalın. Asla:
yorumlar için (ab) kullanmaya çalışmayın . Benzer dillerdeki eğik yıldız /* */
biçimine benzeyen kabukta özel çok satırlı yorum mekanizması yoktur C
.
Tamlık uğruna, ancak uygulama önerildiği için değil, çok satırlı "yorumlar" yapmak için burada-belgelerin kullanılmasının mümkün olduğunu belirteceğim :
: <<'end_long_comment'
This is an abuse of the null command ':' and the here-document syntax
to achieve a "multi-line comment". According to the POSIX spec linked
above, if any character in the delimiter word ("end_long_comment" in
this case) above is quoted, the here-document will not be expanded in
any way. This is **critical**, as failing to quote the "end_long_comment"
will result in the problems with unintended expansions described above.
All of this text in this here-doc goes to the standard input of :, which
does nothing with it, hence the effect is like a comment. There is very
little point to doing this besides throwing people off. Just use '#'.
end_long_comment
CommentedOutBlock() { echo "test"; }