[

[

非常に混乱した初心者として、もし声明と[ ], [[ ]], ( ), (( ))

なぜ

if [ $jengnr -eq 1 ]; then

正しいですが、ここでは二重になっています:

if [[ -f "$jdir$object.eng.dat" ]]; then

そして、if 内のネストされた if は (( )) であるべきだと読みました (私のコードではありません)

#!/bin/bash
# Nested if statements
if [ $1 -gt 100 ]
then
echo Hey that\'s a large number.
if (( $1 % 2 == 0 ))
then
echo And is also an even number.
fi
fi

しかし、if [[ ]] ステートメント内の if ステートメントで [[ ]] を使用しましたが、それは機能しましたか?

誰か、何が、誰が、なぜ 4 つの異なる if があるのか​​を説明してくれませんか?

..そして、いつそれらを正しく使用すればよいのでしょうか?

答え1

[

これはシェル テスト コマンド (場合によっては組み込みコマンド) であり、シェル テストを実行するための移植可能な方法です。

[[

これは「拡張テスト」と呼ばれることが多く、主にkshとbashでのみサポートされており、シェルテストよりも多くの機能を使用できますが、移植性はそれほど高くありません。

(

これはテスト コマンドではありません。単一の括弧はサブシェルを作成します。if ステートメントは、それに続くコマンドからの戻りコードを評価するだけなので、 using はif ( command ); then機能しますが、サブシェルの戻り値を評価するだけになります。

((

ifこれにより、算術関連の条件をテストするときに と組み合わせて使用​​できるシェル算術が可能になります。


さらに、ネストされた if ステートメントにはそのようなルールがないため、ネストのレベルに関係なく、これらのメソッドを任意に組み合わせて使用​​できることに注意してください。

関連情報