0

私はこれまでBashの専門家ではないので、いくつか質問があります.特定のタスクを実行する前に確認する必要がある条件がいくつかありますが、それらのいくつかは関連しており、切り離すことはできません.次のステートメントのようにチェックします。

if ((1 OR 2) AND (3 OR 4))
   then
      blabla...
fi

ここまで作って、

if [[ "[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]" && "[ `echo "$5" | cut -c 4-5` -lt 0 || `echo "$5" | cut -c 4-5` -gt 23 ]" ]]
   then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi

そしてそれは正しく動作します。このチェックを実行するためにもっと簡単にできることがある気がしますが、方法がわかりません...

次に、上で書いたコードで、次のことがわかります。

"[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]"

単純な角括弧はテスト関数に対応していますよね? では、二重引用符を付けると、なぜ適切に呼び出されるのでしょうか? そこに逆引用符を入れることができないことは理解していますが、エコー "$5" では意味がありません... しかし、二重引用符は $ などの特殊文字を置き換え、単一のスペースを無視しないようにする必要があるため、なぜ[文字を置き換えますか?これらの特殊文字の 1 つと見なされますか?

回答ありがとうございます。

4

2 に答える 2

1

からhelp [[:

 ( EXPRESSION )   Returns the value of EXPRESSION
于 2011-05-06T10:32:28.687 に答える
1

繰り返さないでください:

a=$(echo "$5" | cut -c 1-2)
b=$(echo "$5" | cut -c 4-5)

または bash パラメーター展開構文を使用します。

a=${5:0:2}
b=%{5:3:2}

また、算術置換を使用できます。

if (( a < 0 || a > 23)) && (( b < 0 || b > 23 )); then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi
于 2011-05-06T13:31:38.540 に答える