Bash:条件付き構成でユーザー定義関数(trueまたはfalseを返す)を使用する方法は?

Bash:条件付き構成でユーザー定義関数(trueまたはfalseを返す)を使用する方法は?

ifwhileまたは、ステートメントの条件付きコンテキスト(たとえば、文字列が単語かバージョン番号など)でパラメータをテストするカスタムメソッドを正しく使用するにはどうすればよいですかuntil

特に(二重)中括弧は、片側のテスト方法で問題があるようです-gt

1つのメソッドしか呼び出せませんか?それでは、そうするための背景要件は何ですか?それでは、内部/外部(二重)括弧と他のステートメントは、コマンドの置き換えifなしで関数呼び出しにどのように反応しますか?whileuntil

他のテストメソッドを呼び出すためにコマンド置換を使用しない場合でも、ブール演算子を介してそれらを連結できますか?

接続に角かっこまたは二重角かっこが必要なユースケースはありますか?

コマンド拡張はいつ必要ですか?関数を呼び出すために算術拡張が必要な​​場合もありますか?

答え1

true / successパラメータが0で、その他のfalse / failureパラメータを持つ組み込み関数を[使用して、他のすべてのコマンド(このコマンドを含む)と同様に、終了状態で成功/失敗true / falseを返すようにします。または、return関数によって実行された最後のコマンドの終了のみが返されます。

isnewer() {
  [ "$1" -nt "$2" ]
  # here returns with the status of the [ command
}

isvowel() {
  case $1 in
    ([aeiouAEIOU]) true;; # or return 0
    (*) false;;           # or return 1
  esac
}

このコマンドは複合コマンドの終了状態を返しcase、それ自体はその中で実行された最後のコマンド(したがって、ここのコマンドまたはコマンドtruefalse終了状態)を返します。

if次に、/ステートメントでコマンドでwhileはなく次の関数を呼び出します[

if isnewer /etc/passwd /etc/shadow; then
  echo passwd newer than shadow
fi
if isvowel "$x" || isvowel "$y"; then...

二重中括弧または二重中括弧の(明確にはわからない)while[は通常のコマンド(testそのコマンドの他の名前)にすぎず、Kornシェルといくつかの派生項目は次のとおりですbash

  • (( arithmetic expression ))算術式(Cに似た構文に従い、シェルごとに異なる)を評価し、結果の数値が0以外の場合はtrue /成功(通常のように終了ステータスが0)を返す構文です。算術式構文には、Cと似た比較とブール演算子(、、、、<... )があります。>=||&&
  • 条件式を評価する構文です(シェルによって異なり、その引数がどのように解析さ[[ conditional expression ]]れるかを想定する独自の構文を使用します)。 / commandなどのこの構文は、次のような多くのテストまたは比較を実行するために使用できます。上記の文字列または偶数。[[test-nt

しかし、Bashには二重角括弧演算子はありません。

関連情報