如何在csh中随机从列表中选择一个对象

时间:2015-09-11 15:35:55

标签: csh

正如标题所示,我试图在我的csh脚本中随机选择一个列表中的对象。

到目前为止我所拥有的是:

set list = ( \
           "string1" \
           "string2" \
           "string3" \
           )

while [1] do
    random_object = "I picked ${list [$RANDOM % ${#list[@]} ] }"
    echo $random_object

    sleep 1 #test code so I can see it randomise 
done

我得到的只是“[1]:不匹配。”

有人有解决方案吗?

2 个答案:

答案 0 :(得分:1)

您必须在某些标准UNIX实用程序的帮助下调用。

例如:

#!/bin/csh -f

set list = ( \
           "string1" \
           "string2" \
           "string3" \
           )
while (1)
  dd if=/dev/random of=/tmp/random count=1 bs=4 >& /dev/null
  set random_nr = `od -t u4 /tmp/random | awk '{print $2;}'`
  @ random_index = $random_nr % $#list + 1
  set random_object = "I picked $list[$random_index]"
  echo "$random_object ($random_nr)"
  sleep 1
end

答案 1 :(得分:0)

主要是@ fork2execve建议的内容。但是,您可以进行一些简化。你不需要打电话给awk,也不需要dd;而且您不需要临时文件。你可以这样做:

set random_nr=`od -D -N1 -An /dev/urandom`