명령 조건은 때로는 정수이고 때로는 문자열입니다.

명령 조건은 때로는 정수이고 때로는 문자열입니다.

이 조건을 실행하고 싶습니다.

while [ $(cat /path_of a file/) -eq 1 ]

조건이 참인 경우에만 조건이 참이 됩니다.

$(cat /path_of a file/) 

문자열이 아닌 정수입니다!

이 문제를 어떻게 극복할 수 있습니까?

답변1

=예를 들어 연산자를 사용하여 이 작업을 수행 할 수 있습니다 [ $(cat /path_of a file/) = 1 ]. 두 인수의 문자열 표현을 비교하므로 모든 경우에 작동합니다.

경우에 -eq따라 문자열 비교 대신 사용하는 것이 더 나을 수도 있지만( [ 01 -eq 1 ]사실이지만 [ "01" = 1 ]그렇지 않음) 대부분의 경우 더 위험합니다. 반면에 정수 비교가 정말로 필요한 경우 @Gnouc의 제안을 사용해야 합니다.

답변2

Bash의 변수는 유형이 지정되지 않습니다. 조건이 항상 정수를 사용하여 평가되도록 하려면 delcare -i변수를 항상 정수로 만들기를 사용할 수 있습니다. 에서 bash manpage:

declare [-aAfFgilrtux] [-p] [name[=value] ...]
.....
-i     The variable is treated as an integer; arithmetic evaluation
       (see ARITHMETIC EVALUATION above) is performed  when the variable
       is assigned a value.

따라서 귀하의 예는 다음과 같습니다.

declare -i number
number="$(cat /path_of a file/)"

while [ "$number" -eq 1 ]

버전 4.x를 사용하는 경우 대신 bashnew test를 사용해야 합니다 .[[...]][...]

관련 정보