멍청한 배쉬! 바보 같은 나! Bash에서 문자열 비교

나는 보통 bash 스크립트를 작성하지 않습니다. 터미널을 자주 사용하여 AWS ClI 명령을 실행하지만 로직이나 좀 더 복잡한 것이 필요한 경우 작은 NodeJs 파일을 사용하는 것이 좋습니다.

나에게 더 자연스럽고 읽기 쉽고 무엇이 잘못되었는지 느낍니다.

때로는 지속적인 통합에 사용되는 오래된 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 docsStackoverflow을 확인했습니다.
가능한 모든 조합에서 Single Equals/Single Equals/Quotes를 혼합하고 일치시키려고 노력하면서 한동안 스크립트와 StackOverflow 예제를 쳐다보게 되었습니다. 그것이 나를 때릴 때까지.

우주.

기괴한 미싱 공간

if [[ $CI_PIPELINE_SOURCE  == "schedule" ]] && [[ -z "$STAGE" ]]; then




나는 여기에 내 자신의 알림으로 Stackoverflow explanation을 다시 제안합니다.

= || == ?



Bash는 ==가 [와 동등하게 사용될 수 있도록 허용합니다(그러나 이것은 표준이 아닙니다).



인용하거나 인용하지 않습니까?



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



도움이 되길 바랍니다.

좋은 웹페이지 즐겨찾기