シェルにはブール変数の概念はありません。
シェル変数は、可能性がtext
ある場合に、そのテキストが(整数として解釈することができる、(文字列)、および1
、0xa
、010
、など)。
したがって、a flag=true
はシェルに対して真実性または虚偽をまったく意味しません。
ひも
何行うことができることのいずれかの文字列の比較である[ "$flag" == "true" ]
か、いくつかのコマンドで変数の内容を使用してチェックし、その結果を実行するように、true
(両方の実行ファイルが呼び出されがあるのでtrue
、もう1つは呼ばれるfalse
そのコマンドの終了コードがゼロの場合)コマンドとして、チェック(成功)。
$flag; if [ "$?" -eq 0 ]; then ... fi
または短く:
if "$flag"; then ... fi
変数の内容をコマンドとして!
使用する場合、次のように、両方の間にスペースが存在する場合(! cmd
)、コマンドの終了ステータスを無効にするためにa を使用できます。
if ! "$flag"; then ... fi
スクリプトは次のように変更する必要があります。
flag=false
while ! "$flag"
do
read x
if [ "$x" == "true" ]
then
flag=true
fi
echo "${x} : ${flag}"
done
整数
数値と算術展開を使用します。
この場合、$((0))
is 1
の終了コードと$((1))
isの終了コードです0
。
bash、ksh、およびzshでは、演算はaの内部で実行できます((..))
(開始$
が欠落していることに注意してください)。
flag=0; if ((flag)); then ... fi
このコードの移植可能なバージョンはより複雑です。
flag=0; if [ "$((flag))" -eq 0 ]; then ... fi # test for a number
flag=0; if [ "$((flag))" == 0 ]; then ... fi # test for the string "0"
bash / ksh / zshでは次のことができます。
flag=0
while ((!flag))
do
read x
[ "$x" == "true" ] && flag=1
echo "${x} : ${flag}"
done
代わりに
「ブール変数を反転」することができます(数値が含まれている場合):
((flag=!flag))
それはなります変更の値flag
のいずれか0
かを1
。
注:コードを質問として投稿する前に、https://www.shellcheck.net/でエラーを確認してください。問題を見つけるのに十分な回数です。