命令条件有时是整数有时是字符串

命令条件有时是整数有时是字符串

我想执行这个条件

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[[...]]而不是[...].

相关内容