如果我有类似的东西:
echo 1 2 3 4 5 6
或者
echo man woman child
我必须在管道后面放什么才能选出1 2 3 4 5 6
or的一个元素man woman child
?
echo 1 2 3 4 5 6 | command
3
答案1
如果你的系统有shuf
命令
echo 1 2 3 4 5 | xargs shuf -n1 -e
如果输入确实不是需要通过标准输入进行回显,那么最好使用
shuf -n1 -e 1 2 3 4 5
答案2
如果您没有 shuf (这是一个很棒的工具),但您有 bash,那么这里有一个仅 bash 的版本:
function ref { # Random Element From
declare -a array=("$@")
r=$((RANDOM % ${#array[@]}))
printf "%s\n" "${array[$r]}"
}
你必须颠倒你的调用的意义——使用ref man woman child
而不是echo man woman child | command
。请注意,这$RANDOM
可能不是“强”随机的——请参阅 Stephane 的评论:https://unix.stackexchange.com/a/140752/117549
以下是示例用法和随机 (!) 采样(前导$
是 shell 提示符;不要键入它们):
$ ref man woman child
child
$ ref man woman child
man
$ ref man woman child
woman
$ ref man woman child
man
$ ref man woman child
man
$ ref 'a b' c 'd e f'
c
$ ref 'a b' c 'd e f'
a b
$ ref 'a b' c 'd e f'
d e f
$ ref 'a b' c 'd e f'
a b
# showing the distribution that $RANDOM resulted in
$ for loop in $(seq 1 1000); do ref $(seq 0 9); done | sort | uniq -c
93 0
98 1
98 2
101 3
118 4
104 5
79 6
100 7
94 8
115 9