多行命令将是 shell 的一行:
$ if [ -f /var/log/messages ]
> then
> echo "/var/log/message exists."
> fi
是一样的:
if [ -f /var/log/messages ]; then echo "/var/log/message exists."; fi
因此,如果您在一行命令上放置空格,它将像历史设置一样被忽略。
ADD:shell选项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肯定不会在第二行“then”上工作。如果您在“then”之前放置一个空格,它将不会被忽略。它仅适用于第一行,但随后适用于所有下一行。
所以最后一个例子(不忽略第二行以空格开头)
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 5
66 if [ -d /tmp ]
67 then
68 echo Hello
69 fi
70 history 5
我希望这能回答你的问题。