首页 > 解决方案 > 带有命令替换的局部变量赋值行为异常

问题描述

我在管理对话框输出和退出代码时遇到了一些麻烦。本质上,我正在尝试获取一个用于获取对话框选择和终止脚本功能的单行脚本:

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关键字:删除局部变量说明符,它开始按预期工作。

到底是怎么回事?我注定要使用“全局”变量吗?

标签: bash

解决方案


不仅local如此,所有声明实用程序都会屏蔽被替换命令的退出代码,因为赋值不会失败。

通常的解决方法是:

local _ui_envname
_ui_envname=$(dialog --stdout --cancel-label "Back" --inputbox 'Enter the new environment name:' 0 0) || { echo "Failed"; exit 1; }

推荐阅读