if [[ $nb_dd > 0 ]]; then
INPUT_TYPE="txt"
fi
if [ $nb_dd > 0 ]; then
INPUT_TYPE="txt"
fi
第一次检查(使用双括号)无法执行,导致脚本在错误时退出,因为$INPUT_TYPE
未填充 - 但后一版本(单括号)正常工作,正确设置$INPUT_TYPE
。这是为什么?
我正在运行OS X(10.11.4)(echo $SHELL = /bin/bash
) - 这是来自广泛分布的工具套件,这些工具假设是在Linux平台上构建的 - 而.sh脚本则适用于作者所以它可能是一个特定于平台的问题,虽然我想不出原因。
答案 0 :(得分:3)
他们俩都工作"对我来说,但是你使用了错误的测试类型。 >
内的[[
正在进行文本比较。对于算术比较,可以使用旧的-gt
或(更好)正确的括号 - 双括号:
if (( nb_dd > 0 )); then
INPUT_TYPE="txt"
fi
请注意,未使用$
,因为只能在((...))
内部比较数字(使用$
内部可能有效,但由于扩展顺序可能会产生奇怪的副作用)
答案 1 :(得分:2)
您必须gt
和lt
进行比较,
if [[ $nb_dd -gt 0 ]];
then INPUT_TYPE="txt";
fi
if [ $nb_dd -gt 0 ];
then INPUT_TYPE="txt";
fi
双括号只是扩展后缀功能
>
在符合posix的test
表达式中没有任何意义,它只是调用输出重定向。
[ 2 > 3 ] && echo "shouldn't print this"
[ 2 -gt 3 ] && echo "this isn't printed"
对于posix的扩展表达式,它意味着刺激比较。
[[ "aa" > "ab" ]] && echo "doesn't print"
[[ "aa" > "aa" ]] && echo "doesn't print"
[[ "ab" > "aa" ]] && echo "prints"