![bash 传递“if”条件作为参数?](https://linux22.com/image/188361/bash%20%E4%BC%A0%E9%80%92%E2%80%9Cif%E2%80%9D%E6%9D%A1%E4%BB%B6%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%EF%BC%9F.png)
是否可以传递 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 ]
有点相关: