この条件を実行したいと思います。
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を使用する必要があります。[[...]]
[...]