pmor Asked: 2024-10-04 22:55:43 +0800 CST2024-10-04 22:55:43 +0800 CST 2024-10-04 22:55:43 +0800 CST Bash 是否有选项可以诊断“扩展为空值”变量?[重复] 772 Bash 是否有一个选项可以诊断(并可选择中止执行)“扩展为空值”变量? 示例(假设): $ bash -c 'echo $x' --xxx bash: line 1: variable 'x' expanded to empty value 提问的原因:这样的选项在调试脚本时可能会有用。 例如,在某些脚本中,所有变量都应扩展为非空值。因此,使用选项来检测(并可选地中止执行)“扩展为空值”的变量对于这种情况可能很有用。 我已经在set内置中搜索过此选项,但一无所获。 bash 1 个回答 Voted Best Answer Gilles 'SO- stop being evil' 2024-10-04T23:11:27+08:002024-10-04T23:11:27+08:00 所有 sh shell 都可以通过运行以下命令使访问未设置的变量出错: set -u 错误导致 shell 以非零状态退出。当错误发生在子 shell 中时,只有该子 shell 会退出,并且由调用代码决定是否传播错误(如果它愿意的话)。 例子: $ bash -c 'echo hello $x world; echo continuing' hello world continuing $ bash -c 'set -u; echo hello $x world; echo continuing' bash: line 1: x: unbound variable $ bash -u -c 'echo hello $x world; echo continuing' bash: line 1: x: unbound variable 我认为没有任何方法可以将此应用于设置为空值的变量。这是一个奇怪的要求。空字符串有什么特别之处,使它比任何非空字符串都差? $ bash -c 'set -u; x=$(true); echo "x ($x) is empty, so what?"' x () is empty, so what?
所有 sh shell 都可以通过运行以下命令使访问未设置的变量出错:
错误导致 shell 以非零状态退出。当错误发生在子 shell 中时,只有该子 shell 会退出,并且由调用代码决定是否传播错误(如果它愿意的话)。
例子:
我认为没有任何方法可以将此应用于设置为空值的变量。这是一个奇怪的要求。空字符串有什么特别之处,使它比任何非空字符串都差?