在运行时之前是否有任何hack不在bash中评估变量?我有一种像这样的for循环: 问题是我把它放在回声中......否则这很有效!
for i in $(seq 0 100); do echo $(echo $RANDOM % 10 | bc); done
结果例如总是3 ...
答案 0 :(得分:3)
除了你的问题:你的解决方案使用2个外部进程,1个管道,1个子进程进行一项简单的练习。 Pure Bash:
for (( CNTR=0; CNTR<=100; CNTR+=1 )); do
echo $((RANDOM%10))
done
答案 1 :(得分:0)
这适合我。
for i in $(seq 0 100);
do
echo $RANDOM % 10 | bc
done
我看到......回声这对我有用:
for i in $(seq 0 100);
do
echo "foo $(echo $RANDOM % 10 | bc)"
done
答案 2 :(得分:0)
或者,可以使用支撑扩展:
for i in {0..100}; do
echo $((RANDOM%10))
done
答案 3 :(得分:0)
当您想要抢占变量插值时,传统的解决方案是使用引号和eval
。这不像纯Bash解决方案那么优雅,但显然更便携。
for i in $(seq 0 100); do
eval 'echo $RANDOM % 10 | bc'
done
这只是原始代码的最小重构,我发布它只是为了完整性。
答案 4 :(得分:-1)
你在这里遇到了一些问题,我认为其中任何一个都与变量评估无关。
首先,这里没有定义$RANDOM
。也许你把它设置为3
某处,这就是为什么你总是得到3
作为输出?
第二个是你不需要那两个echo
。省略外面的那个,以及围绕另一个的$()
。