bashは "if"条件を引数として渡しますか?

bashは "if"条件を引数として渡しますか?

if節で確認した条件を通過することは可能ですか(https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html)関数引数として?以下は機能しません。

print_message_if_condition_holds() {
  local CONDITION="$1"
  local MESSAGE="$2"

  if $CONDITION; then
    echo "$MESSAGE"
  fi
}

print_message_if_condition_holds [ 0 -eq 0 ] "Success"

少し異なる構文で実行できますか?

答え1

これがどれほど望ましいかはわかりませんが、各マーカーを別々の位置パラメータとして扱うことは可能です。条件によっては異なる数のトークン([ -z str ]など)が必要になる可能性があるため、パラメータをハードコードすることはできません。ただし、1つしかない限り、[ str ]順序を変更して実行できます。[ n -lt m ]messaage

print_message_if_condition_holds() {
  local message=$1
  shift
  local condition=("$@")

  if "${condition[@]}"; then
    echo "$message"
  fi
}

print_message_if_condition_holds "Success" [ 0 -eq 0 ] 

やや関連:

関連情報