谁能告诉我我在这里做错了什么?有了这个条件,如果没有设置变量,我不希望用大括号括起来的代码块运行。那么,为什么我总是得到&;[:-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
就可以了。