
非常に混乱した初心者として、もし声明と[ ], [[ ]], ( ), (( ))
なぜ
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 ステートメントにはそのようなルールがないため、ネストのレベルに関係なく、これらのメソッドを任意に組み合わせて使用できることに注意してください。