如何在bash中读取可变数量的字符?

时间:2016-05-18 20:03:40

标签: bash

我试图在bash脚本中读取stdin中的length个字符,但我无法弄清楚如何将长度作为变量传递。

这是应该(tm)工作的脚本:

for i in {1..9}
do
  read line
done

array=(${line})
length=${array[1]}

echo "$length" >> /home/ubuntu/test
read line
read -n $length line

echo "$line" >> /home/ubuntu/test

echo "done" >> /home/ubuntu/test

但是,当我cat /home/ubuntu/test时,我看不到上次阅读的数据:

20558

done

但是,如果我将read -n $length line替换为read -n 20558 line,我会在文件中获得预期的数据。

如何将长度作为变量传递给read

修改

好的,我在length中有一个尾随换行符。这有效:

read -n ${length:0:-1} line

1 个答案:

答案 0 :(得分:0)

awk救援!

awk 'NR==9{len=$2} NR==11{print substr($0,1,len); exit}'

根据您的脚本,第9行的第二个字段定义了从第11行读取的长度。