1

我想让 bash/terminal 命令使其回显

 ...  . . . .  . .  ..  ...... .. . . .

换句话说,随机数量的点可能最多 100 个点,与空格混合。

这如何通过 bash 脚本完成?

4

4 回答 4

6

如果您希望该行真正随机,请说:

cat /dev/urandom | tr -dc '. ' | fold -w 100 | head -1

要将其分配给变量,请说:

foo=$(cat /dev/urandom | tr -dc '. ' | fold -w 100 | head -1)

示例输出如下所示:

  ......   .  . .     .......  .  ...    .....   . ... .  .  .  . .    ..   .... .   .  . .  ... . .

简单地说:

cat /dev/urandom | tr -dc '. ' | fold -w 100

将产生无穷无尽的 100 个字符宽的随机数据行,直到您中断。

于 2013-08-28T09:00:25.570 回答
2

这是一个单行:

max=$((RANDOM%100)); for ((i=0;i<max;i++)); do ((RANDOM%2)) && a="$a." || a="$a "; done; echo "$a"

或以更易读的格式:

max=$((RANDOM%100))
for ((i=0;i<max;i++))
do 
    ((RANDOM%2)) && a="$a." || a="$a "
done
echo "$a"
于 2013-08-28T08:53:20.013 回答
1

这个怎么样?

#!/bin/bash

for i in {1..100}; do
    even=$(( $RANDOM % 2 ))
    if [ $even -eq 0 ]; then
            printf " ";
    else
            printf "." 
    fi  
done

printf "\n"

或如评论中所问:

#!/bin/bash

a=$(
    for i in {1..100}; do
            even=$(( $RANDOM % 2 ))
            if [ $even -eq 0 ]; then
                    printf " ";
            else
                    printf "."
            fi
    done
    printf "\n"
)

echo $a
于 2013-08-28T08:53:44.727 回答
1
$ x='. '; for i in {1..100}; do printf "${x:$((RANDOM%2)):1}"; done && echo
 . .. ...   .....  .. .   .. .    .. .   .. . ...  .....  . . ..  ... . . .  .. .. ..    .. . .....

这样,您还可以通过执行 egx='.... '和使用轻松地影响点间距比$RANDOM % 5

$ x='.... '; for i in {1..100}; do printf "${x:$((RANDOM%5)):1}"; done && echo
.................. ... ...... . .  ..... .     ........ . ....    ............ ........... .. .  ...

或在输出中添加其他字符

$ x='abc '; for i in {1..100}; do printf "${x:$(($RANDOM%4)):1}"; done && echo
b a ccac  bb aac abbcccab aa   baabb cbbacbacb  cbab b a baccccaa bc  acc  cca ba cacccaaa  cbaba ab
于 2013-08-28T09:51:35.843 回答