이 조건을 실행하고 싶습니다.
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를 사용하는 경우 대신 bash
new test를 사용해야 합니다 .[[...]]
[...]