멍청한 배쉬! 바보 같은 나! Bash에서 문자열 비교
나에게 더 자연스럽고 읽기 쉽고 무엇이 잘못되었는지 느낍니다.
때로는 지속적인 통합에 사용되는 오래된 bash 스크립트를 만져야 하지만. 오늘 같이. 음, 실제로는 GilabCI Pipelines를 실행하는 데 사용되는 YAML 파일이었지만 the job script contained a bash script 작동하지 않았습니다.
if [$CI_PIPELINE_SOURCE == "schedule"] && [[ -z "$STAGE" ]]; then
# collapsed multi-line command
이 조건은 성공적인 작업을 제공하는 CI에 의해 삼켜진 오류를 제공했지만 물론 예기치 않은 동작이 있었습니다.
27/bin/bash: line 118: [schedule: command not found
Single Brackets 또는 Double Brackets에 대한 내용이 생각나서 바로 변경했습니다.
[[$CI_PIPELINE_SOURCE == "schedule"]]
아니요.
그런 다음 변수를 따옴표로 묶는 것에 대한 내용이 생각나서 다음으로 변경했습니다.
[["$CI_PIPELINE_SOURCE" == "schedule"]]
아니요.
the docs 및 Stackoverflow을 확인했습니다.
가능한 모든 조합에서 Single Equals/Single Equals/Quotes를 혼합하고 일치시키려고 노력하면서 한동안 스크립트와 StackOverflow 예제를 쳐다보게 되었습니다. 그것이 나를 때릴 때까지.
우주.
기괴한 미싱 공간
if [[ $CI_PIPELINE_SOURCE == "schedule" ]] && [[ -z "$STAGE" ]]; then

나는 여기에 내 자신의 알림으로 Stackoverflow explanation을 다시 제안합니다.
= || == ?
Bash는 ==가 [와 동등하게 사용될 수 있도록 허용합니다(그러나 이것은 표준이 아닙니다).

인용하거나 인용하지 않습니까?
변수가 비어 있으면 Bash 스크립트에서 구문 오류가 발생하므로 변수를 항상 따옴표로 묶습니다. (무언가를 null 값과 비교하려고 하기 때문이 아니라 구문 자체가 깨질 것이기 때문입니다.)

도움이 되길 바랍니다.
Reference
이 문제에 관하여(멍청한 배쉬! 바보 같은 나! Bash에서 문자열 비교), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dvddpl/stupid-bash-stupid-me-comparing-strings-in-bash-21jd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)