使用测试时出现奇怪的评估结果
Weird eval result when using test
得到一个名为 a
的变量:
unset b
a="b"
试图接受这个声明:
if test -n "$(eval $${a})"; then echo Y; fi
# Outputs nothing
效果很好 - 它计算 $${a}
为 $b
,它是空的并且不回显。
正在尝试将上面的内容转换成类似这样的内容:
eval "if test -n $${a}; then echo Y; fi"
# Outputs "Y"
这行不通 - 但更奇怪:
eval "if test -z $${a}; then echo Y; fi"
# Outputs "Y"
这是为什么?同一条语句如何为以上两者输出 Y
?我可以像我在整个过程中尝试使用 eval
一样格式化第一条语句吗?
eval "if test -n $${a}; then echo Y; fi"
与以下相同 a
是 b
:
eval 'if test -n $b; then echo Y; fi'
因为 b
未设置,并且 $b
是 未引用 ,它在扩展后实际上丢失了,因此 eval
计算如下:
if test -n; then echo Y; fi
因为 -n
不是空字符串,test -n
计算结果为真并执行 echo Y
。
得到一个名为 a
的变量:
unset b
a="b"
试图接受这个声明:
if test -n "$(eval $${a})"; then echo Y; fi
# Outputs nothing
效果很好 - 它计算 $${a}
为 $b
,它是空的并且不回显。
正在尝试将上面的内容转换成类似这样的内容:
eval "if test -n $${a}; then echo Y; fi"
# Outputs "Y"
这行不通 - 但更奇怪:
eval "if test -z $${a}; then echo Y; fi"
# Outputs "Y"
这是为什么?同一条语句如何为以上两者输出 Y
?我可以像我在整个过程中尝试使用 eval
一样格式化第一条语句吗?
eval "if test -n $${a}; then echo Y; fi"
与以下相同 a
是 b
:
eval 'if test -n $b; then echo Y; fi'
因为 b
未设置,并且 $b
是 未引用 ,它在扩展后实际上丢失了,因此 eval
计算如下:
if test -n; then echo Y; fi
因为 -n
不是空字符串,test -n
计算结果为真并执行 echo Y
。