조건부 이진 연산자 예상

var="$(command1 -l "$var2" -c "command2|grep -c "search"")" if [[ var !=0 ]]; then fi 

왜 “조건부 이진 연산자 예상”이 표시됩니까? 나는 이미 수색했다. I. [[]]이 테스트 문이지만 작동하지 않는 이유는 무엇입니까?

답변

  1. 당신 “당신이 작성한 것처럼 var를 호출 할 때 var 앞에 $가 없습니다. 문자 그대로 var가됩니다.
  2. [[ ... ]] 또는 (( ... ))를 사용할 때 스크립트의 가능한 취약점 을 고려하세요. div>를 제어 할 수없는 변수와 함께 사용하세요. 귀하의 경우에는 [ "$var" -ne 0 ]를 사용하는 것이 더 나을 수 있습니다.
  3. !=0 (오류의 원인입니다!)
  4. != 문자열 비교 연산자 이지만 예제에서는 작동 할 수 있지만 -ne를 사용하여 정수를 비교할 수 있습니다.

shellcheck 를 사용합니다.

댓글

  • 참고 t hat (( var !=0 ))도 여기서 작동하지만 [[ "$var" -ne 0 ]]와 마찬가지로 캡처되는 명령의 출력 특성이있는 경우 임의의 명령 주입 취약점이됩니다. 제어 할 수 없습니다.
  • 통찰 해 주신 St é phane에게 감사드립니다. [[ "$var" -ne 0 ]]이 안전하지 않다고 생각하십니까? 따옴표없이 같은 것은 어떻습니까? 그렇다면 무엇을 선호해야한다고 생각하십니까?
  • [[ $var -ne 0 ]] (따옴표 포함 또는 제외,이 특정 경우에는 따옴표가 필요하지 않음) 또는 (( var!=0 )), $var의 내용은 산술 표현식으로 평가되고 나쁜 일이 발생할 수 있습니다. . [ "$var" -ne 0 ] ([는 일반 명령이므로 여기에 필요한 따옴표)는 bash (다른 모든 쉘은 아님), $var는 10 진수로만 해석되기 때문입니다. [ "$var" != 0 ] (또는 [[ $var != 0 ]] kshism)도 안전하지만 $var 인 경우 true를 반환합니다. 00를 ' 문자열 비교로 포함합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다