【问题标题】:Makefile echo randomMakefile 随机回显
【发布时间】:2017-05-19 01:18:46
【问题描述】:

我定义了一个函数来获取 10 个随机数,其值为 [0..9]。

define write_file
for i in $$( seq 1 10 );\
do\
    RANDOM := $(shell bash -c 'echo $$RANDOM')%10;\
    echo -n $$RANDOM >> test.txt;\
done
endef

但是当我调用它时,输出是:

for i in $( seq 1 10 ); do RANDOM := 25401%10; echo $RANDOM; done
/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

/bin/sh: 1: RANDOM: not found

我也尝试过使用echo $RANDOM 而不是echo $$RANDOM,但还是不行。

编辑

我还在 bash shell 脚本中尝试了 echo RANDOM。

#!/bin/sh
for i in $( seq 1 10 )
do
    echo ${RANDOM}
done

但是终端出现了提示。

正确的 bash 脚本

从评论中,#!/bin/sh 应更改为#!/bin/bash

#!/bin/bash
for i in $( seq 1 10 )
do
    echo ${RANDOM}
done

【问题讨论】:

  • 更改为#!/bin/bash,因为$RANDOMbash 扩展。
  • 您的 makefile 正在尝试在 shell for 循环中分配 make 变量。这怎么可能行得通?
  • 那么我怎样才能得到10个随机数呢?
  • 当我改为bash时,什么都没有改变。
  • 脚本适合我。

标签: bash shell makefile gnu-make


【解决方案1】:

awk 来救援!

seq 10 | awk 'BEGIN{srand()} {print(int(rand()*10))}' > test.txt

awk -v n=10 'BEGIN{srand(); for(i=1;i<=n;i++) print(int(rand()*10))}' > test.txt

要获得相邻的数字,您可以这样做

awk -v n=10 'BEGIN{srand(); 
                   for(i=1;i<=n;i++) 
                   printf "%d",(int(rand()*10)); 
                   print ""}'

如上重定向到文件。

【讨论】:

  • 这里没有显示如何将它们放入make 变量中。
  • 他在我发表评论后补充说。
  • 我想写10个随机数,其值为[0..9]到一个文件中。
  • 它有效。但我想要 1234567890 格式而不是 123...
  • seq 10 | awk 'BEGIN{srand()}{ORS=""}{print(int(rand()*10))}' &gt;&gt; tmp/test.txt 为我工作。 ORS=""
猜你喜欢
  • 2021-09-09
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
相关资源
最近更新 更多