Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。

シェルスクリプトのインデントにはスペースとタブのどちらがよいか?

シェルスクリプトのインデントにタブを使うべきかスペースを使うべきか悩んだのでちょっとまとめた。 自分の結論としては,シェルスクリプトでのインデントはタブとなった。 シェルスクリプトの構文のヒアドキュメントでインデントするにはタブを使うしかないので,スペースとタブを混在させてしまうくらいなら,タブで統一したほうがよいと判断した。
1
. @senopen

今までインデントはスペース派だったのだけど、シェルスクリプトに関しては、タブのほうがよいかもしれない。 理由はヒアドキュメントでインデントするにはタブじゃないとダメだから。 シェルショッカーさんとかどうしてるのだろう?帰宅したら確認してみよう。

2016-06-09 18:35:02
. @senopen

@senopen シェルショッカーさんは基本スペース2個インデントで,ヒアドキュメントのところだけインデントをタブにしている・・・気持ち悪いけどPOSIX原理主義的にはどうなのだろう? kotoriotoko/tweet.sh github.com/ShellShoccar-j…

2016-06-09 21:53:40
ShellShoccar-jpn, a secret society @shellshoccarjpn

@senopen POSIX原理主義的にはどうでもよいことだ。互換性や製品寿命には何ら影響せんかんらな。

2016-06-09 22:31:04
. @senopen

@shellshoccarjpn まあ確かに互換性とは関係ありませんね。 ちょっと気になっていたので,参考にさせていただきました。 ご回答ありがとうございました。

2016-06-09 22:33:49
. @senopen

.@senopen Googleはスペース Shell Style Guide google.github.io/styleguide/she… これはタブ Coding style guidelines inquisitor.ru/doc/coding-sty… タブにしようかな。

2016-06-09 22:39:39
ShellShoccar-jpn, a secret society @shellshoccarjpn

@senopen なぜヒアドキュメントだけtabなのか。tabは環境によって見た目が変わるのが気に入らんが、ヒアドキュメントだけどうしようもなく使っているだけだ。そしてRichieも我に合わせてそうしている。そうやって自我なく他人のスタイルに合わせる奴のやり方は少々鼻につくがな。

2016-06-09 22:42:00
. @senopen

@shellshoccarjpn なるほど…。僕も基本的にはタブは環境によって変わるので避けています。 しかし,シェルスクリプトに関してはヒアドキュメントで行頭にタブを使うしかないです。 インデントにタブとスペースが混在するのは紛らわしくてよくないのでタブでいいかなとも思いました

2016-06-09 22:46:35
. @senopen

他の人がどうしているのか気になったので,シェルスクリプトに詳しそうなので参考にさせていただきました。 理由まで教えていただきありがとうございました。 @shellshoccarjpn

2016-06-09 22:49:16
. @senopen

.@senopen なぜインデントにこだわりだしたかというと,ヒアドキュメントを関数内で使いたくなったから。 行頭を常にインデントにしておいて,ヒアドキュメントをいつも<<-で書けば,丸ごと関数に移動させたりして,インデントさせても何も問題ないと考えたからだ。保守性が高いかなと

2016-06-09 22:53:20
. @senopen

@senopen ちなみに,<<-を使っている時にヒアドキュメント内の行頭にタブを埋め込む方法もみつけた。 以下のように適当な未定義の変数を前置すれば可能みたい。 unset NULL タブcat <<- EOF > a.dat タブ${NULL}タブa タブEOF

2016-06-09 22:55:25
. @senopen

「シェルスクリプトのインデントにはスペースとタブのどちらがよいか?」をトゥギャりました。 togetter.com/li/985564

2016-06-09 23:07:11
. @senopen

@senopen いいまとまりなのでtogetterでまとめといた。ツイート数個なんだけどね。

2016-06-09 23:08:54

反響

Jun Ōmae (大前潤) @jun66j5

shell でインデントできる here document って使わないな。使ったこともほとんどないし。

2016-06-09 23:07:44
. @senopen

僕もほとんど使ったことなかったのですけど,関数内でヒアドキュメントを使おうとしたら,意識せざるを得なくなりますよー。 シェルスクリプトが肥大化してきたら,まとまりごとに関数化して処理をわかりやすくしたくなりました。 RE twitter.com/jun66j5/status…

2016-06-09 23:52:53
Jun Ōmae (大前潤) @jun66j5

関数の内側で here doc. がインデント0になってても気にしない…かあまり長くならないようにするかな。前に書いた github.com/jun66j5/trac-d… を見たら here doc. ですらなかった… twitter.com/senopen/status…

2016-06-10 00:05:07
Jun Ōmae (大前潤) @jun66j5

ちょっとずつ書き足していってるのもあってめっちゃ構造が小汚いな。。。

2016-06-10 00:12:31
Jun Ōmae (大前潤) @jun66j5

というかそもそも <<- のときに here doc. に書いた先行してるタブが他の行と同じ数じゃなくても削る仕様が気に入らないのよね

2016-06-10 00:52:10
Gouji Ochiai @gjo

タブと空白の使い分けを受け入れられるのは、ロートル扱いされても仕方ないよなあ、と思う MakefileとかHere documentとかWhite spaceとか:-)

2016-06-10 08:56:22
Gouji Ochiai @gjo

そういう意味ではPythonもそうか:-)

2016-06-10 09:01:42
Jun Ōmae (大前潤) @jun66j5

here doc. をインデントしたくて <<- を使うぐらいなら、インデントしたいという欲求を捨てるか、代わりに { echo "..." echo "..." } | command を使うわ、にいまのところ落ち着いている

2016-06-10 12:09:56
. @senopen

@jun66j5 ヒアドキュメントのインデントを使いたくない理由はなんなのですか? それともタブでインデントするのがダメなのでしょうか。 ヒアドキュメントのインデントはPOSIXでも定義されてるシェルスクリプトの文法。 これに合うようにスタイルを合わせるのは自然と思うのですが…

2016-06-10 21:34:27
Jun Ōmae (大前潤) @jun66j5

@senopen vim で shiftwidth=4 expandtab にしているんですがインデント変更 <<, >> コマンドなどで誤ってタブ文字を破壊しないようにケアするのが面倒なので。全員が sw=8 noet にしているならともかく。

2016-06-10 21:56:11
. @senopen

@jun66j5 インデントをタブにして,ファイルタイプかsh.vimでシェルスクリプトはタブにするようにしておけば,次回からは問題ないのでは? autocmd! FileType sh setlocal noexpandtab 自分で選べない不自由な環境ならしかたありませんが…

2016-06-10 22:00:40
青子守歌 @aokomoriuta

インデントとアラインの区別がつかないアホが滅びぬ限りインデントはスペース4つとか言ってるアホも消えないから、ってずっと言ってるでしょ!!

2016-06-09 23:18:22
残りを読む(10)

コメント

. @senopen 2016年6月10日
まとめを更新しました。
0
ひろ@猫もふ欠乏症 @hiro_h 2017年2月5日
逆に、色々コーディング規約を読み漁って、言語を問わずインデントをtabに統一することにしました。 インデントの階層と、論理文字数が一致するのが気に入りました。見た目はそれぞれの好みの方が良いだろうし、場合によって変える余地があるのも好きです。
0
. @senopen 2017年2月6日
hiro_h なるほど。それはそれで一貫していていいですね。
0