有人可以指出输出有什么问题。
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
上面有for i in {0..8} ; for j in {0..16}
我希望这是一个嵌套的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
我想在ROW1中使用[0]到[7] ROW2中的[8]至[15]
等等。
答案 0 :(得分:0)
如果你想做数学,请使用(( ))
。
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
答案 1 :(得分:0)
test
命令([
是test
的别名,而不是语法)需要从多个参数构建表达式。这意味着空间对于分离运算符和操作数至关重要。由于每个部分都是一个单独的参数,因此您还需要引用*
,以便在调用test
/ [
之前shell不会将其扩展为文件glob。
if [ "$i" "*" "$j" % 8 -eq 0 ]; then
test
命令需要7个单独的参数:$i
,*
,$j
,%
,-eq
和{{1然后,它组装成一个要评估的表达式。它不会将任意字符串解析为表达式。
如John Kugelman所述,在0
中有更简单的方法来完成此类算术。