3

在“rabbitmq-env”的rabbitmq脚本文件中,有以下几行。

[ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname`
NODENAME=rabbit@${HOSTNAME%%.*}

第一行是什么意思?检查$HOSTNAME是否设置,如果没有设置,设置为'env hostname'

它是第一行的编程模式,占据了另一个相关脚本文件的大部分"rabbitmq-server"。所以我想知道这条线的明确含义。

对于第二行, 的含义是HOSTNAME%%.*什么?

4

1 回答 1

6

此表达式检查是否HOSTNAME未设置:

[ "x" = "x$HOSTNAME" ]

如果HOSTNAME未设置,这最终看起来像:

[ "x" = "x" ]

哪个当然评估为true. 表达方式:

[ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname`

将设置HOSTNAMEenv hostnameif 之前的表达式&&is的输出true。调用与调用env hostname完全相同hostname,只是输出本地主机的名称。

第二种表达方式:

NODENAME=rabbit@${HOSTNAME%%.*}

正在使用bash变量扩展来剥离除主机名的第一个组成部分之外的所有内容。给定HOSTNAME="host.example.com"${HOSTNAME%%.*}回报host。您可以在bash手册页中阅读更多内容:

${parameter%%word}
  Remove matching suffix pattern.  The word is expanded to produce
  a pattern just as in pathname expansion.  If the pattern matches
  a trailing portion  of  the expanded value of parameter, then
  the result of the expansion is the expanded value of parameter
  with the shortest matching pattern (the ``%'' case) or the longest 
  matching pattern (the ``%%'' case) deleted.

所以这设置NODENAMErabbit@host,假设您的本地主机名是host.example.com

于 2012-05-27T01:03:45.777 回答