有人请介意解释这在地球上应该是什么意思:
insanity.sh
的内容:
#!/bin/bash
ARG=""
if [ -n $ARG ]; then
echo string is greater than zero
fi
if [ -z $ARG ]; then
echo string is empty
fi
运行脚本:
[USERNAME@login001 clusterUtils]$ ./insanity.sh
string is greater than zero
string is empty
当前正在使用this教程。
答案 0 :(得分:4)
之所以会这样,是因为您没有在$ARG
中引用[ ... ]
。
在不引用您的代码的情况下,有效地的运行方式为:
if [ -n ]; then
echo string is greater than zero
fi
if [ -z ]; then
echo string is empty
fi
[ ... ]
之间的任何非空字符串都将为true ,因此,两个if
条件均成功。
修正::建议您在使用[[ ... ]]
时使用bash
:
arg=""
if [[ -n $arg ]]; then
echo 'string is greater than zero'
fi
if [[ -z $arg ]]; then
echo 'string is equal to zero, empty'
fi
[[ ... ]]
不需要像[ ... ]
正弦[
是一个外部命令,而[[ ... ]]
是一个内置的bash构造那样对变量加引号。
还要避免脚本中所有大写变量,以避免与保留的env变量发生冲突。