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 ] 

다소 관련됨:

관련 정보