字符串同时大于零且为空

时间:2018-08-07 17:45:45

标签: bash comparison

有人请介意解释这在地球上应该是什么意思:

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教程。

1 个答案:

答案 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变量发生冲突。