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 に答える