bash - Bash 脚本 while 循环不起作用:“预期 -le 一元运算符”
问题描述
我正在尝试像这样运行 bash 脚本:
#!/bin/bash
set i=1991
while [ $i -le 2017 ]
do
echo "looping and doing stuff"
$i++
done
echo all done
我收到以下错误:
[: -le: unary operator expected
我也尝试过像这样更改代码:
#!/bin/bash
set i=1991
while (( $i <= 2017 ));
do
echo "looping";
(( $i++ ));
done
echo ALL done
这给了我这个错误:
((: <= 2017 : syntax error: operand expected (error token is "<= 2017 ")
我试过这个:
#!/bin/bash
set i=1991
while [ "$i" -le "2017" ]
do
echo "looping"
$i++
done
echo ALL done
我明白了:
[: : integer expression expected
我认为这是一个愚蠢的语法错误,但不幸的是我似乎无法弄清楚。我的 bash 版本是 4.3.48。
谢谢!
解决方案
set
用于设置位置参数,不是普通变量。
$ unset i
$ set i=1991
$ echo "$1"
i=1991
$ echo "$i"
$
是的i=1991
单个参数set
,被视为文字字符串,而不是任何类型的赋值。
只需放下set
:
i=1991
while (( i < 2017 ));
...
((i++))
done
推荐阅读
- tensorflow - RGB图像上的Tensorflow conv2d
- r - 在R中覆盖2张具有透明度的图像
- python - 当有很多字段时管理 django 的创建方法
- c# - 在满足条件之前查找值
- reactjs - Webpack在构建后删除片段代码,如何保留它?
- autocomplete - PhpStorm - html 注释中的自动完成
- python-xarray - 使用 min_periods 和 reduce 时,xarray 滚动与 pandas 不匹配
- ios - 如何以编程方式在不在同一个故事板上的视图控制器之间切换?
- python - 简单数组求和
- python - 如何缩短用于提取的 numpy 代码