存储在另一个变量中的未设置变量名称会出错

Unset variable names stored in another variable gives error

为什么会出现以下情况

MY_VARS="VAR1 VAR2 VAR3"
unset "$MY_VARS"

给我一个错误?

unset: VAR1 VAR2 VAR3: invalid parameter name

TL;DR 使用数组。 MY_VARS=(VAR1 VAR2 VAR3); unset "${MY_VARS[@]}"


您正在尝试取消设置名为 VAR1 VAR2 VAR3 的单个变量,而不是名为 VAR1VAR2VAR3.

的三个变量

如果zsh默认对不带引号的参数扩展进行分词,你可以这样写

unset $MY_VARS

但事实并非如此。您可以使用

显式启用它
setopt SH_WORD_SPLIT
unset $MY_VARS

或者只为这个扩展启用它(如 oguz ismail 在评论中指出的那样)

unset ${=MY_VARS}

但是,执行此操作的“正确”方法是使用数组。

MY_VARS=(VAR1 VAR2 VAR3)
unset "${MY_VARS[@]}"