bash - 带有命令替换的局部变量赋值行为异常
问题描述
我在管理对话框输出和退出代码时遇到了一些麻烦。本质上,我正在尝试获取一个用于获取对话框选择和终止脚本功能的单行脚本:
local _ui_envname=$(dialog --stdout --cancel-label "Back" --inputbox 'Enter the new environment name:' 0 0) || { echo "Failed"; exit 1; }
然而,上面的命令惨遭失败(退出代码为 1{ echo "Failed"; exit 1; }
时根本不执行)。dialog
罪魁祸首似乎是local
关键字:删除局部变量说明符,它开始按预期工作。
到底是怎么回事?我注定要使用“全局”变量吗?
解决方案
不仅local
如此,所有声明实用程序都会屏蔽被替换命令的退出代码,因为赋值不会失败。
通常的解决方法是:
local _ui_envname
_ui_envname=$(dialog --stdout --cancel-label "Back" --inputbox 'Enter the new environment name:' 0 0) || { echo "Failed"; exit 1; }
推荐阅读
- postgresql - Sequelize ON DELETE CASCADE
- python - IntegrityError(1452,'无法添加或更新子行:外键约束失败)
- r - 如何在李克特图表的每个条形上输出正确的百分比?
- cypress - 赛普拉斯 - 如何在测试运行后重新加载页面而不触发测试重新运行?
- java - 从列表中删除第二项会使 REST API 崩溃
- python - Profiling custom sklearn pipeline
- python - 如何根据键将列表元素添加到现有字典中?
- html - ReactJS FontAwesome 图标呈现不同大小
- python - Django 投票系统 - django-secretballot 和 django-vote 对我来说都是错误的,我应该自己编写投票系统吗?
- reactjs - TypeError:destroy is not a function in useEffect 由 async/await 引起