셸에는 부울 변수 개념이 없습니다.
쉘 변수는 될 수있는 text
경우에, 그 텍스트 (정수로 해석 할 수있다, (AN 문자열), 및 1
, 0xa
, 010
, 등).
따라서 flag=true
셸에 대한 진실성 또는 거짓이 전혀 없음을 의미합니다.
끈
수행 할 수있는 것은 문자열 비교 [ "$flag" == "true" ]
또는 일부 명령에서 변수 내용을 사용 하고 결과 와 같은 결과를 확인 하고 실행하십시오 true
(실행 파일 true
과 호출 파일이 모두 있기 때문에 false
) 명령으로 종료 명령이 0인지 확인하십시오 (성공한).
$flag; if [ "$?" -eq 0 ]; then ... fi
또는 더 짧게 :
if "$flag"; then ... fi
변수의 내용이 명령 !
으로 사용 ! cmd
되면 다음과 같이 ( ) 사이에 공백이 있으면 a를 사용하여 명령 의 종료 상태를 무효화 할 수 있습니다 .
if ! "$flag"; then ... fi
스크립트는 다음과 같이 변경되어야합니다.
flag=false
while ! "$flag"
do
read x
if [ "$x" == "true" ]
then
flag=true
fi
echo "${x} : ${flag}"
done
정수
숫자 값과 산술 확장을 사용하십시오 .
이 경우 종료 코드는 $((0))
is 1
이고 종료 코드는 $((1))
입니다 0
.
bash, ksh 및 zsh에서 산술은 내부에서 수행 될 수 있습니다 ((..))
(시작 $
이 누락 되었음을 유의하십시오 ).
flag=0; if ((flag)); then ... fi
이 코드의 이식 가능한 버전은 더 복잡합니다.
flag=0; if [ "$((flag))" -eq 0 ]; then ... fi # test for a number
flag=0; if [ "$((flag))" == 0 ]; then ... fi # test for the string "0"
bash / ksh / zsh에서 다음을 수행 할 수 있습니다.
flag=0
while ((!flag))
do
read x
[ "$x" == "true" ] && flag=1
echo "${x} : ${flag}"
done
대안 적으로
다음과 같이 "부울 변수 반전"(숫자 값이 포함 된 경우) :
((flag=!flag))
즉 것이다 변경 의 값 flag
에 하나 0
또는 1
.
참고 : 코드를 질문으로 게시하기 전에 https://www.shellcheck.net/ 에서 오류를 확인 하십시오 . 여러 번 문제를 찾기에 충분합니다.