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 ]、等),因此您无法对参数进行硬编码 - 但只要只有一个[ 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 ] 

有点相关:

相关内容