好奇心から、次のようなものを好む理由はありますか?
while [[ $number -lt 10 ]]
以上
while (( $number < 10 ))
彼らは同じことをしているようです。それらの1つにパフォーマンス上の利点があるのか 、それとも移植性の懸念があるの[[ ]]
でしょうか?
好奇心から、次のようなものを好む理由はありますか?
while [[ $number -lt 10 ]]
以上
while (( $number < 10 ))
彼らは同じことをしているようです。それらの1つにパフォーマンス上の利点があるのか 、それとも移植性の懸念があるの[[ ]]
でしょうか?
少し前に何らかの比較をしたいとき、プログラム「test」を使用していましたが、通常は「[」という名前にシンボリックリンクされていました。
したがって、次のような表現がありました。
if [ ..... ]; then
テストはデフォルトで無意識的に比較され、数値比較が必要な場合は、-lt/-gt などを使用する必要がありました。
次に、bash は独自の内部テスト エンジンを取得しました。それを使用するには、[[ を使用します。
したがって、以前と同じ構文:
if [ ... ]; then
次のように書き換えることができます。
if [[ ... ]]; then
比較がbash自体で行われ、テストプログラムのfork/execを必要としなかったことを除いて、同じことを行います。
外部プログラムへの呼び出しではないので、数値的に比較する別の方法を追加する方が簡単です。したがって (( )) が現れました。
これには一定の利点がありますが、一般的に見過ごされているのは、数値のコンテキストを課すことです。
つまり、次のようなものを使用できます。
i=1
(( i++ ))
echo $i # will return 2
簡単に言えば、比較の場合、それほど重要ではありません。しかし、man bash で (( )) と [[ ]] についてもっと学ぶことは価値があります。
((
すべての複雑な算術演算子を))
使用できますが、で定義された制限された比較のみ[[
を許可します]]
man test
また、すべての間隔制限を強制するわけではないので((
、 andを使用することをお勧めします。))
あなたは非常にうまく使うことができます:
while ((number<10))
また
while ((number*2<10))
等