Bash [: -gt:一元操作符



谁能告诉我我在这里做错了什么?有了这个条件,如果没有设置变量,我不希望用大括号括起来的代码块运行。那么,为什么我总是得到&;[:-gt:一元操作符期望值&;?

感谢
[ -n $start_step_i ] && { 
[ $start_step_i -gt 0 ] && [ $start_step_i -le 4] && start_step=$start_step_i ; 
} 
[ $start_step == 1 ] && echo "Running all steps"

start_step_i为空

"但我检查了它是否为非空,检查通过了!">

不,你没有。您未能引用参数展开,因此空字符串作为分词的一部分从命令中删除,并且您运行[ -n ],这被解释为对字面值字符串-n的测试。-n非空,检查成功。

总是引用参数展开:

[ -n "$start_step_i" ] && 
[ "$start_step_i" -gt 0 ] &&
[ "$start_step_i" -le 4] &&
start_step="$start_step_i"
[ "$start_step" = 1 ] && echo "Running all steps"

有一个例外:赋值的右侧不受分词或路径名展开的影响,因此可以安全地省略引号。start_step=$start_step_i就可以了。

最新更新