コマンド条件は時々整数、時には文字列です。

コマンド条件は時々整数、時には文字列です。

この条件を実行したいと思います。

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を使用する必要があります。[[...]][...]

関連情報