複数行のコマンドは、シェルでは 1 行になります。
$ if [ -f /var/log/messages ]
> then
> echo "/var/log/message exists."
> fi
は次のように同じです:
if [ -f /var/log/messages ]; then echo "/var/log/message exists."; fi
したがって、1行のコマンドにスペースを入れると、履歴設定のように無視されます。
追加: シェル オプション cmdhist の効果
shopt -s cmdhist # set cmdhist (is set by default)
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 2
43 if [ -d /tmp ]; then echo Hello; fi
44 history 2
この場合、複数行のコマンドは単一行に連結されます。
shopt -u cmdhist # unset cmdhist
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 5
46 if [ -d /tmp ]
47 then
48 echo Hello
49 fi
50 history 5
このような場合、履歴の各行が個別に表示されます。
ここで ignorespace オプションを設定すると、if[] の 4 行すべてで機能するはずです。したがって、(bash man の) 免責事項は、cmdhist=off で常に機能するかどうかわからないと言うでしょう。したがって、ignoreoption は 2 行目の "then" では確実に機能しません。「then」の前にスペースを入れても無視されません。最初の行でのみ機能しますが、次のすべての行で機能します。
最後の例(スペースで始まる2行目を無視しない)
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 5
66 if [ -d /tmp ]
67 then
68 echo Hello
69 fi
70 history 5
これがあなたの質問に答えてくれることを願っています。