4

好奇心から、次のようなものを好む理由はありますか?

while [[ $number -lt 10 ]]

以上

while (( $number < 10 )) 

彼らは同じことをしているようです。それらの1つにパフォーマンス上の利点があるのか​​ 、それとも移植性の懸念があるの[[ ]]でしょうか?

4

3 に答える 3

3

少し前に何らかの比較をしたいとき、プログラム「test」を使用していましたが、通常は「[」という名前にシンボリックリンクされていました。

したがって、次のような表現がありました。

if [ ..... ]; then

テストはデフォルトで無意識的に比較され、数値比較が必要な場合は、-lt/-gt などを使用する必要がありました。

次に、bash は独自の内部テスト エンジンを取得しました。それを使用するには、[[ を使用します。

したがって、以前と同じ構文:

if [ ... ]; then

次のように書き換えることができます。

if [[ ... ]]; then

比較がbash自体で行われ、テストプログラムのfork/execを必要としなかったことを除いて、同じことを行います。

外部プログラムへの呼び出しではないので、数値的に比較する別の方法を追加する方が簡単です。したがって (( )) が現れました。

これには一定の利点がありますが、一般的に見過ごされているのは、数値のコンテキストを課すことです。

つまり、次のようなものを使用できます。

i=1
(( i++ ))
echo $i # will return 2

簡単に言えば、比較の場合、それほど重要ではありませ。しかし、man bash で (( )) と [[ ]] についてもっと学ぶことは価値があります。

于 2013-06-21T14:58:20.143 に答える
0

((すべての複雑な算術演算子を))使用できますが、で定義された制限された比較のみ[[を許可します]]man test

また、すべての間隔制限を強制するわけではないので((、 andを使用することをお勧めします。))あなたは非常にうまく使うことができます:

while ((number<10)) 

また

while ((number*2<10)) 

于 2013-06-21T14:54:51.157 に答える