web-dev-qa-db-ja.com

bash ifステートメント[:行方不明 `] 'エラー

Bashに問題があります。コマンドをifステートメントに入れて、それを文字列と比較しようとしています。

これは完全に機能します。

echo $(ipcs | grep Shared | awk '{print $2}')

ifステートメントに入れると、いくつかの問題が発生します。

$ if [ "$(ipcs | grep Shared | awk '{print $2}')" -eq "Shared"]; then
  echo expression evaluated as true;
else
  echo expression evaluated as false;
fi
bash: [: missing `]'
expression evaluated as false

$ if [ "$(ipcs | grep Shared | awk '{print $2}')" = "Shared"]; then
  echo expression evaluated as true;
else
  echo expression evaluated as false;
fi
bash: [: missing `]'
expression evaluated as false

$ if [ "$(ipcs | grep Shared | awk '{print $2}')" == "Shared"]; then
  echo expression evaluated as true;
else
  echo expression evaluated as false;
fi
bash: [: missing `]'
expression evaluated as false

私は試した ===-eqどちらを使用するかわからなかったため。

45
cokedude

_missing ]'_エラーは、_"Shared"_と_]_の間にスペースが必要なため、行はif [ "$(ipcs | grep Shared | awk '{print $2}')" == "Shared" ]; thenである必要があります。

65
Yann