ACCESS_TOKEN
null이 같은지 확인하고 종료되는 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
답변2
확인 해봐:
[ -n "$ACCESS_TOKEN" -eq null ]
[
테스트 연산자인 경우 다음을 확인할 수 있습니다.
문자열 값이 0이 아닌 경우 - 사용할 때
-n
두 정수 비교 - 사용할 때
-eq
하지만 동시에 둘 다는 아닙니다! (적어도 이 형태는 아닙니다.) 따라서 이 형태에서 확인하고 싶은 내용을 선택해야 합니다 [
. 비교하려는 경우 연산자를 통해 수행되는 null
문자열 비교가 됩니다 =
.
답변3
쉘을 사용할 수 있습니다
매개변수 확장. . . ${매개변수:-단어} 기본값을 사용합니다. 인수가 설정되지 않거나 비어 있으면 단어의 확장이 대체됩니다.
좋다
if [ "${ACCESS_TOKEN:-x}" = null ]; then echo Yes; else echo No; fi;
test
리터럴 문자열에서는 변수의 null "속성"이 아니라 "null"입니다 .