在“rabbitmq-env”的rabbitmq脚本文件中,有以下行。
[ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname`
NODENAME=rabbit@${HOSTNAME%%.*}
第一行的含义是什么?是否设置$HOSTNAME
是否设置,如果未设置,设置为'env hostname'
?
第一行的编程模式占据了另一个相关脚本文件"rabbitmq-server"
的大部分。所以我想知道这条线的明确含义。
对于第二行,HOSTNAME%%.*
的含义是什么?
答案 0 :(得分:6)
此表达式检查HOSTNAME
是否未设置:
[ "x" = "x$HOSTNAME" ]
如果未设置HOSTNAME
,则最终会显示如下:
[ "x" = "x" ]
当然评估为true
。表达式:
[ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname`
如果HOSTNAME
之前的表达式为env hostname
,则会将&&
设置为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.
因此,假设您的本地主机名为NODENAME
,这会将rabbit@host
设置为host.example.com
。