我想执行这个条件
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 ]
请注意,如果您有bash
版本 4.x,则应使用 new test[[...]]
而不是[...]
.