bash - linux bash脚本错误
问题描述
当我尝试运行此脚本时
for ((i=1; i<=5; i++))
do
for ((j=1; j<=5; j++))
do
echo –n $i
done
echo " "
done
我收到此错误:
syntax error near unexpected token '(('
for ((j=1; j<=5; j++))"
解决方案
看来您正在使用不是 bash 的解释器运行它。我已经缩进了您的代码,但它也可以在没有缩进的情况下正常工作。
$ cat test.bash
for ((i=1; i<=5; i++))
do
for ((j=1; j<=5; j++))
do
echo –n $i
done
echo " "
done
$ /bin/sh test.bash
/tmp/test.bash: 1: Syntax error: Bad for loop variable
$ echo $BASH_VERSION
5.0.11(1)-release
$ bash test.bash
–n 1
–n 1
–n 1
–n 1
–n 1
–n 2
–n 2
…
如您所见,echo -n
不可靠。将该行更改printf %s $i
为解决该问题,您的输出将变为:
11111
22222
33333
44444
55555
如果你用 bash 调用它,也许你的 bash 版本太旧了?您可以使用for i in {1..5}
更兼容的东西(但不是有效的 POSIX),也可以for i in 1 2 3 4 5
用于完全兼容 POSIX。如果您有 GNU coreutils,则可以for i in $(seq 5)
改为使用(请参阅参考资料man seq
)。
为了更好地接近您的预期逻辑,您还可以考虑一个while
循环:
i=0
while [ $((++i)) -le 5 ]
do
j=0
while [ $((++j)) -le 5 ]
do
printf %s $i
done
echo " "
done
这在循环之前初始化i
为零while
,然后在与五比较时在测试条件中将其递增;第一个循环的第一次迭代递增i
到1
,发现它确实小于或等于 ( -le
) 5
,因此继续。
(我正在使用$((…))
算术表达式并++i
在其中使用,因为更常见的方法是在递增之前i++
返回 的值,而在递增之后返回 的值。)i
++i
i
推荐阅读
- javascript - 无效日期的 Moment.js 问题
- css - 字体真棒:使用 hover::before 时,图标消失了
- excel - 如何运行公式直到最大值或阈值
- amazon-s3 - 有没有办法在恒定时间内在同一存储桶内复制 s3 上的对象 - O(1)
- jenkins - 使用 3GB 内存的 Jenkins 简单安装
- javascript - 为什么我的 Qualtrics Javascript 代码没有运行预期的迭代次数?
- javascript - 通过 JavaScript 将图像添加到 HTML 表格单元格
- c++ - vtkMolecule - 移除原子
- haskell - 如何在 Haskell 中将自然数的范围定义为字符?
- dart - BLoC 状态管理模式(Flutter)