在下面,我想检查是否设置了给定的变量名称:
$ set hello
$ echo $1
hello
$ echo $hello
$ [[ -z \$$1 ]] && echo true || echo false
false
由于$hello
未设置,我希望测试返回true
。这有什么不对?我会假设我错误地逃避了美元
TYIA
答案 0 :(得分:0)
您正在测试\$$1
是否为空。因为它以$
开头,所以它不是空的。实际上,\$$1
会扩展为字符串$hello
。
您需要告诉shell您要将$1
的值视为要展开的参数的名称。
使用bash:[[ -z ${!1} ]]
使用zsh:[[ -z ${(P)1} ]]
使用ksh:tmp=$1; typeset -n tmp; [[ -z $tmp ]]
便携式:eval "tmp=\$$1"; [ -z "$tmp" ]
(请注意,这些将以相同的方式处理未设置和空白,这通常是正确的。)