我试图让坐标“x”在区间[-1,1]内随机移动。但是,我的代码有时有效,有时无效。我试过 ShellCheck,但它说“没有检测到问题!”。我是条件语句的新手,我用错了吗?
我在 Linux 的 Windows 子系统上运行它。我正在 nano 上编辑它。由于我有一个脚本可以绘制 200 个这样的“随机游走”,代码应该可以始终如一地工作,但我真的不明白为什么它不能。
这是我的代码:
x=0
for num in {1..15}
do
r=$RANDOM
if [[ $r -lt 16383 ]]
then
p=1
else
p=-1
fi
if [[ $x -eq $p ]]
then
x=$(echo "$x-$p" | bc )
else
x=$(echo "$x+$p" | bc )
fi
echo "$num $x"
done
我期待这样的事情:
1 -1
2 0
3 1
4 0
5 1
6 0
7 1
8 0
9 1
10 0
11 -1
12 0
13 1
14 0
15 1
但通常的输出是这样的:
1 1
2 0
3 -1
4 0
5 -1
6 0
7 -1
(standard_in) 1: syntax error
8
(standard_in) 1: syntax error
9
(standard_in) 1: syntax error
10
(standard_in) 1: syntax error
11
(standard_in) 1: syntax error
12
(standard_in) 1: syntax error
13
(standard_in) 1: syntax error
14
(standard_in) 1: syntax error
15
总是在 -1 之后停止。
最佳答案
您可以使用 bash
执行此操作:
x=$(( x - p ))
或
(( x -= p ))
而且你不需要bc
。
关于bash - "random walk"脚本的 if 条件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703459/