[0]-bash:[:0*1%8:应为整数表达式
有人能指出输出有什么问题吗[0]-bash:[:0*1%8:应为整数表达式,bash,Bash,有人能指出输出有什么问题吗 for i in {0..127} ; do echo -n [$i] if [ $i*$j%8 -eq 0 ]; then echo "\n" fi mytool -c "read 0x1540:0xa0:$i*$j" done 我正在尝试将输出格式化为每行包含8项的行 我尝试了下面的建议,并将代码修改为 for i in {0..8} ; for j in {0..16}; do echo -n [$
for i in {0..127} ; do
echo -n [$i]
if [ $i*$j%8 -eq 0 ]; then
echo "\n"
fi
mytool -c "read 0x1540:0xa0:$i*$j"
done
我正在尝试将输出格式化为每行包含8项的行
我尝试了下面的建议,并将代码修改为
for i in {0..8} ; for j in {0..16}; do
echo -n [$i*$j]
if [[ $i*$j%8 == 0 ]]; then
echo
fi
mytool -c "read 0x1540:0xa0:$i*$j"
done
在{0..8}中为i;在{0..16}中为j
我希望这是一个嵌套的for循环。我不确定这是否是我在bash中执行嵌套循环的方式
但输出结果并不像我预期的那样
我的输出看起来像
[0]0x3
[1]0x4
[2]0x21
[3]0x1
[4]0x0
[5]0x0
[6]0x4
[7]0x41
[8]0x84
[9]0x80
[10]0x0
[11]0x0
[12]0x3
[13]0x0
[14]0x43
[15]0x49
[16]0x53
[17]0x43
[18]0x4f
[19]0x2d
[20]0x49
[21]0x4e
[22]0x43
[23]0x20
[24]0x0
[25]0x0
[26]0x9
[27]0x3a
[28]0x37
[29]0x34
[30]0x39
[31]0x34
我想要第1行中的[0]到[7]
[8] 至第2行中的[15]
等等。如果你想做数学,请使用
if ((i * j % 8 == 0)); then
根据你的问题描述,我建议重写一下
for i in {0..15}; do
for j in {0..7}; do
echo -n "[$((i * 8 + j))]"
mytool -c "read 0x1540:0xa0:$i*$j"
done
echo
done
test命令[是test的别名,而不是语法要求从多个参数构建表达式。这意味着空格对于单独的运算符和操作数至关重要。由于每个部分都是单独的参数,因此还需要引用*以便shell在调用test/[]之前不会将其展开为文件glob
test命令在这里需要7个独立的参数:$i、*、$j、%、-eq和0,然后将这些参数组合到表达式中进行计算。它不会将任意字符串解析为表达式
正如John Kugelman所指出的,在bash中有更简单的方法来完成这样的运算。这需要[[而不是[按原样工作。使用还需要==而不是-eq.@EtanReisner-请参见上面的注释。$j的值是多少?
if [ "$i" "*" "$j" % 8 -eq 0 ]; then