bash - 无法在bash中调用函数作为参数
问题描述
团队,
在调用包含该函数的脚本时,我无法将函数作为参数调用。你能暗示我错过了什么吗?
#!/bin/bash
if declare -f "$1" > /dev/null
then
"$@"
else
echo "$1 is not a defined function" >&2
exit 1
fi
gfc() {
TEST_PERF_CLASS="GFC"
K8S_Node_Name=("10.1" "10.2" "10.3")
#declare -a K8S_Node_Name=("10.1" "10.2" "10.3")
if ([ "$TEST_PERF_CLASS" = "DFC" ] || [ "$TEST_PERF_CLASS" = "GFC" ]) && [ "$K8S_Node_Name" != "ALLCORDONED" ]; then
for node in "${K8S_Node_Name[@]}"; do
echo "$node"
done
elif ([ "$TEST_PERF_CLASS" = "DFC" ] || [ "$TEST_PERF_CLASS" = "GFC" ]) && [ "$K8S_Node_Name" = "ALLCORDONED" ]; then
echo "CORDONED"
else
printf "Invalid NODE\n"
fi
}
dfc() {
TEST_PERF_CLASS="DFC"
K8S_Node_Name=("11.1" "110.2" "110.3")
if ([ "$TEST_PERF_CLASS" = "DFC" ] || [ "$TEST_PERF_CLASS" = "GFC" ]) && [ "$K8S_Node_Name" != "ALLCORDONED" ]; then
for node in "${K8S_Node_Name[@]}"; do
echo "$node"
done
elif ([ "$TEST_PERF_CLASS" = "DFC" ] || [ "$TEST_PERF_CLASS" = "GFC" ]) && [ "$K8S_Node_Name" = "ALLCORDONED" ]; then
echo "CORDONED"
else
printf "Invalid NODE\n"
fi
> bash bash-call-function.sh gfc
预期输出:
10.1
10.2
10.3
实际的:
gfc is not a defined function
解决方案
考虑这个脚本:
#!/usr/bin/env bash
echo "before declaration:"
type myfunc
myfunc() { echo "foo"; }
echo "after declaration:"
type myfunc
它打印以下内容:
before declaration:
./functest: line 4: type: myfunc: not found
after declaration:
myfunc is a function
myfunc ()
{
echo "foo"
}
你不能在声明之前调用一个函数;您所要做的就是将您的函数声明移动到文件的顶部。
推荐阅读
- javascript - Intl.NumberFormat.prototype.format() 中的默认舍入策略
- nginx - 长 URL 适用于 Python 请求,但不适用于 CURL 或 Web 浏览器 (nginx-uwsgi-django)
- angular - 角拦截器挂起
- android - Expo Bare Workflow Android studio 调试任务:expo-permissions:compileDebugKotlin FAILED
- android - 如果在另一个活动中的一个活动中选择了一个按钮,则该复选框应带有刻度线
- javascript - 如何根据 iframe 中 AJAX 调用的完成来运行函数
- sql-server - 从 Azure SQL 数据库上的烧瓶应用程序调用远程过程不起作用
- django - 当用户单击提交按钮时,付款重定向无法正常工作
- pthreads - WebAssembly pthreads
- delphi-xe - DELPHI FIREDAC 主从关系和计算字段之间的优先级