シェルスクリプトでは複数行のコメントをどう書く?
シェルスクリプトで複数行のコメントアウトがしたい時があります。
例えばPHPでは下記のように書きます。
@php
/*
挟んだ部分
複数行をコメントアウト
することが可能
*/
それでは、シェルスクリプトで複数行のコメントアウトはどうやるでしょうか?
コメントアウト:ソースコードの一部分を実行されないようにコメントにすること
コメントとはプログラムのソースコード中で実行されない行の部分を指します。
コード中に注意書きやメモを書くのに利用します。
コメントするには行頭に特定の記号(bashでは#)を書きます。また、意味のあるコードだが、一時的に実行させたくない行をコメントにすることをコメントアウト言います。
ヌルコマンド(:)とヒアドキュメントで囲う方法
何もしない「:」 というコマンドをヌル(空の,無効な)コマンドと呼びます。
ヌルコマンドは「何もせずに正常終了するコマンド」です。
このヌルコマンドとヒアドキュメントを使うと複数行コメントアウトできます。
: << COMMENT
ここにかいてるコマンドは
echo "test"
コメントとして処理
COMMENT
#ちなみに:は省略しても大丈夫
ヌルコマンドには使い道がいくつかあります。
- 正常終了させる(何もしない)
- ファイルをゼロにする(truncate)
- if文で何も実行しないを記述
正常終了させる
シェルスクリプト中で異常終了したら中断するよう設定した場合(set -e)、最後まで処理が実行されずに中断される。
特定の行の処理に関しては目をつむってほしい(終了ステータスを0にしたい)場合はヌルコマンドを使うと簡単にかけて便利です。
ヌルコマンドを実行した場合終了ステータスは正常終了0になります。
$ izyousyuryou || :
#izyousyuryouはコマンドね
izyousyuryouのコマンドがエラーになった場合、ヌルコマンド:が実行されて終了ステータスは正常になります。
ファイルをゼロにする
ヌルコマンドを使ってファイルの中身をゼロにすることができます。
例えば、肥大したログファイルを削除したいけどプロセスが掴んでいるしどうしようという時
: > 100GB-hidai.log
と実行するとファイルのサイズが0になります。
また、コピーを作成しつつ元のファイルを空にすることでログローテート的なことができます。
cp 100GB-hidai.log 100GB-hidai.log-01 && : > 100GB-hidai.log
if文で何もしないを記述
if文で何もしない時にも便利です。
if [ x == “test”]; then
:;
else
echo "command"
ヌルコマンドとシングルクオートでコメント記述
ヒアドキュメントよりももっとシンプルに書く方法もあります。
下記のようにヌルコマンドとシングルクォートで囲うとコメント記述できます。
: '
ここにかいてるコマンドは
echo "test"
コメントとして処理
'
でもやっぱり#で囲ったほうが可読性が高いです。
複数行囲うコメントアウトの欠点
複数行を囲うコメントアウトは長い行はす早くコメントアウトできますが、コメントアウトした部分が後からみてわかりにくくなる欠点があります。
コメントは#を記述したほうがわかりやすいです。catで表示するときはgrep -v で#の行を除外するだけでコメント行を除いて表示できます。
工夫すれば複数行の先頭に#を入力して素早くコメントアウトできます。
例えば、vimエディタは複数行を選択して簡単に先頭に#を追加できます。
やり方はvimで対象ファイルを開いて
- shift + vでビジュアル選択モードにしてコメントアウトしたい部分を選択
- 選択下状態で : を押し、続いて、s/^/#/g と入力する
- 選択部分がコメントアウトしている
- もとに戻すときはまた選択した後に s/^#//g と入力する
こうするとコメントの部分の行頭全てに#が入るので見やすいです。