我想要一个数组,其中包含文本文件中从1到两倍行数的数字。在本例中,文件somefile.dat有四行。我试过了:
~$ echo {1..$(( `cat somefile.dat | wc -l`*2 ))}
{1..8}
这不是我想要的。然而,括号内的内容显然被解释为整数。为什么总结果是字符串?如何将其转换为int,以便得到数字1到8作为输出?
为什么总结果是字符串?
这是因为shell {1..10}
中的大括号范围指令不支持其中的变量
根据man bash
括号展开在任何其他展开之前执行,并且结果中保留任何其他展开特有的字符。它是严格的文本。Bash不将任何句法解释应用于扩展的上下文或大括号之间的文本。
示例:
echo {1..8}
1 2 3 4 5 6 7 8
n=8
echo {1..$n}
{1..8}
或者您可以使用seq
:
seq 1 $n
1
2
3
4
5
6
7
8