時々、条件を作成するとき、何もしないコードが必要です。たとえば、ここでは、$a
が "10"より大きい場合はBashに何もさせず、$a
が "5"より小さい場合は "1"を出力します。 」:
if [ "$a" -ge 10 ]
then
Elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
ただし、これはエラーになります。何もせず、スクリプトを遅くしないコマンドはありますか?
Shellのno-opコマンドは:
(コロン)です。
if [ "$a" -ge 10 ]
then
:
Elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
bash manual から:
:
(コロン)
引数の展開とリダイレクトの実行以外は何もしません。戻りステータスはゼロです。
おそらくtrue
コマンドを使用できます。
if [ "$a" -ge 10 ]; then
true
Elif [ "$a" -le 5 ]; then
echo "1"
else
echo "2"
fi
別の方法として、あなたの例では(必ずしもどこでもない)if/elseの順序を変更します:
if [ "$a" -le 5 ]; then
echo "1"
Elif [ "$a" -lt 10 ]; then
echo "2"
fi
No-opコマンドに関する元の質問には答えていませんが、「このブランチでは何もしなくてはならない」と思われる多くの(ほとんどではないにしても)問題は、単にこのブランチが発生しないようにロジックを再構築します。
OPの例を使用して一般的なルールを与えようとします
$ aが「10」より大きい場合は何もせず、$ aが「5」より小さい場合は「1」を出力し、そうでない場合は「2」を出力する
$a
が10を超えるブランチを回避する必要があるため、一般的な条件として$a < 10
を他のすべての次の条件に適用できます。
一般的に、Xの場合は何もしないと言う場合、 X の分岐を避けるように言い換えます。通常、Xを否定し、それを他のすべての条件に適用することで、回避を実現できます。
したがって、ルールが適用されたOPの例は、次のように再構築できます。
if [ "$a" -lt 10 ] && [ "$a" -le 5 ]
then
echo "1"
Elif [ "$a" -lt 10 ]
then
echo "2"
fi
上記の単なるバリエーションで、すべてを$a < 10
条件で囲みます。
if [ "$a" -lt 10 ]
then
if [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
fi
(この特定の例では @ Flimzys restructuring の方が確かに優れていますが、何もしない方法を探しているすべての人に一般的なルールを与えたいと思いました。)