我想让 bash/terminal 命令使其回显
... . . . . . . .. ...... .. . . .
换句话说,随机数量的点可能最多 100 个点,与空格混合。
这如何通过 bash 脚本完成?
如果您希望该行真正随机,请说:
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 个字符宽的随机数据行,直到您中断。
这是一个单行:
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"
这个怎么样?
#!/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
$ 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