3

「rabbitmq-env」のrabbitmqスクリプトファイルには、以下の行があります。

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

最初の行の意味は何ですか? 設定されているかどうかを確認し$HOSTNAME、設定されていない場合は に設定し'env hostname'ますか?

関連する別のスクリプト ファイルの大部分を占めるのは、1 行目のプログラミング パターンです"rabbitmq-server"。ですから、この行の明確な意味を知りたいのです。

2 行目の「?」の意味はHOSTNAME%%.*何ですか?

4

1 に答える 1

6

HOSTNAMEこの式は、が設定されていないかどうかをチェックします。

[ "x" = "x$HOSTNAME" ]

が設定されていない場合HOSTNAME、これは次のようになります。

[ "x" = "x" ]

もちろん、これは に評価されtrueます。表現:

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

前の式が の場合のHOSTNAME出力に設定されます。呼び出しは、単にローカル ホストの名前を出力するだけの呼び出しとまったく同じです。env hostname&&trueenv hostnamehostname

2 番目の式:

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

変数展開を使用しbashて、ホスト名の最初のコンポーネント以外をすべて削除しています。を指定するとHOSTNAME="host.example.com"${HOSTNAME%%.*}が返されますhost。詳細については、bashman ページを参照してください。

${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@hosthost.example.com

于 2012-05-27T01:03:45.777 に答える