在循环使用bash中不相关的数字范围时使用文件中的行

时间:2018-11-30 17:02:06

标签: linux bash file loops

我有一个任务,要在表中显示所有bash字体/颜色/背景色,其中每个变体的文本都不同,并且从包含448个单词/随机数的文件中提取(我正在处理数字)。 这是我的代码,用于显示所有变体

for i in {0..8}; do 
for j in {30..37}; do 
for n in {40..47}; do 
echo -ne "\e[$i;$j;$n""mcolors"
done
echo
done
done
echo "" 

输出:enter image description here

用于生成随机数的代码:

#!/bin/bash 
for ((i=0;i<$1;i++))
do
echo $RANDOM >> randomnumbers.sh
done

所以问题是如何将数字从randomnumbers.sh传递到脚本,以便输出中的“颜色”行更改为从randomnumbers.sh按顺序获取的数字?谢谢!

1 个答案:

答案 0 :(得分:2)

一种简单的方法是使用随机数打开文件描述符,并在需要该值时从该文件中读取一行。

在这里,我们使用的是FD 3,因此脚本的其他部分仍然可以从原始的stdin中读取:

#!/usr/bin/env bash

# Make file descriptor 3 point to our file of random numbers (don't use .sh for data files)
exec 3< randomnumbers || exit

for i in {0..8}; do 
  for j in {30..37}; do 
    for n in {40..47}; do
      read -r randomNumber <&3                                 # read one number from FD 3
      printf '\e[%s;%s;%sm%05d' "$i" "$j" "$n" "$randomNumber" # & use in the format string
    done
    printf '\n'
  done
done
printf '\n'