Bashは以下を提供します:パラメータエラーが多すぎます。

Bashは以下を提供します:パラメータエラーが多すぎます。

ACCESS_TOKENnullが等しいことを確認して終了するbashスクリプトがあります。

ACCESS_TOKEN=$(jq -r '.access_token' <<<"$(curl --request GET \
  --url 'https://'$LANDSCAPE'/oauth/token/?grant_type=client_credentials' \
  -u "$CLIENT_ID":"$CLIENT_SECRET")")
if [[ -n $ACCESS_TOKEN -eq null ]]; then 
   exit 1
fi

または:

ACCESS_TOKEN=$(jq -r '.access_token' <<<"$(curl --request GET \
  --url 'https://'$LANDSCAPE'/oauth/token/?grant_type=client_credentials' \
  -u "$CLIENT_ID":"$CLIENT_SECRET")")
if [ -n "$ACCESS_TOKEN" -eq null ]; then 
   exit 1
fi

コンソールログ:

+ ACCESS_TOKEN=null
+ '[' -n null -eq null ']'
/tmp/jenkins6798373284183556496.sh: line 8: [: too many arguments

if conditionそれほどうまくいくようには思えません。

ベストアンサー1

文字列が空でないことを確認したい場合そして「null」の場合、より良い構文は次のとおりです。

if [ -n "$ACCESS_TOKEN" ] && [ "$ACCESS_TOKEN" = "null" ] 
then 
   exit 1
fi

@Tomazが正しく指摘したように、Bash構文を使用すると、両方の前提を同時に確認することはできません。

@Kusanalandaも指摘したように、最初のテストは関係がなく、単にif使用法を説明/説明するためのものです。論理的に$ACCESS_TOKENを再テストするとひも「null」の場合、すでに文字列が空でないことを意味するため、実際には次のように書き直すことができます。

if [ "$ACCESS_TOKEN" = "null" ] 
then 
   exit 1
fi

おすすめ記事