bash - 在 bash 脚本的 if 语句中使用函数和参数
问题描述
我正在尝试测试多个函数调用的返回值,同时将参数解析为其中一个。我尝试了以下方法,但它不起作用。
你能帮我吗?
main() {
if prepareEnvironment "$1" &&
buildInterfaceConfiguration &&
applyNetworkInterfaceFiles
then
echo ':D INSTALLATION COMPLETED :D'
echo ''
else
echo ''
echo ':( INSTALLATION FAILED :('
echo ''
fi
}
prepareEnvironment() {
echo '####################################################################################'
echo 'Preparing environment'
echo '####################################################################################'
echo "num arg: $#"
echo "arg: $1"
echo $1
...
此示例仅在尝试执行函数时返回错误。
解决方案
第一个答案
subshell$(...)
是问题,直接写
if prepareEnvironment "$1" &&
buildInterfaceConfiguration &&
applyNetworkInterfaceFiles
then
...
假设prepareEnvironment "$1"
总是 print some text
,那么您的版本$(...)
将等同于 ...
if some text &&
buildInterfaceConfiguration &&
applyNetworkInterfaceFiles
then
...
...无论prepareEnvironment "$1"
. 在这种情况下,some
不能将其解释为命令bash
,因此会出现错误。
第二个答案
关于缺少的参数:
我看到您prepareEnvironment "$1"
在函数内部调用了main
。如果要使用$1
,则必须先将其传递给main
函数。
推荐阅读
- javascript - 我将如何通过网站中的选择选项来获取形状文件?
- azure - 无法在 Azure 中创建服务 SAS
- java - 尝试将字符串数组的内容转换为要存储在 ArrayList 中的整数时出现 NumberFormatException
- tfs - TFS 2012:无法访问 URL
- javascript - Redux Connect w/ HOC - TypeError:无法设置未定义的属性“道具”
- android - 如何使用 Android 应用程序中的“Azure IoT Hub Device Provisioning Service”注册设备并将遥测读数发送到 Azure IoT Hub?
- python - 断言真与断言不是无
- javascript - 无法设置弹出框的所有 data-x 属性
- vb.net - VB.net - 由于提供程序更改,出现错误“尝试读取或写入受保护的内存......”
- php - php artisan serve 命令显示错误信息