纯/bin/sh
如何区分空变量,未设置变量和不存在(未定义)变量。Posix shell:区分空变量和不存在变量
这里有情况:
# Case 1: not existing
echo "${foo}"
# Case 2: unset
foo=
echo "${foo}"
# Case 3: Empty
foo=""
echo "${foo}"
现在我想检查每个这样的三种情况。 如果情况2和情况3实际上是相同的,那么我必须至少能够区分它们和情况1.
任何想法?
UPDATE 解决由于利玛窦
这是怎样的代码看起来像:
#foo <-- not defined
bar1=
bar2=""
bar3="a"
if ! set | grep '^foo=' >/dev/null 2>&1; then
echo "foo does not exist"
elif [ -z "${foo}" ]; then
echo "foo is empty"
else
echo "foo has a value"
fi
if ! set | grep '^bar1=' >/dev/null 2>&1; then
echo "bar1 does not exist"
elif [ -z "${bar1}" ]; then
echo "bar1 is empty"
else
echo "bar1 has a value"
fi
if ! set | grep '^bar2=' >/dev/null 2>&1; then
echo "bar2 does not exist"
elif [ -z "${bar2}" ]; then
echo "bar2 is empty"
else
echo "bar2 has a value"
fi
if ! set | grep '^bar3=' >/dev/null 2>&1; then
echo "bar3 does not exist"
elif [ -z "${bar3}" ]; then
echo "bar3 is empty"
else
echo "bar3 has a value"
fi
而且结果:
foo does not exist
bar1 is empty
bar2 is empty
bar3 has a value
你的情况2和情况3是相同的。 'foo ='将foo定义为空字符串,就像'foo =“”'所做的一样。 –