我想要一个数组,其中包含文本文件中行数为1到两倍的数字。在此示例中,文件somefile.dat有四行。我试过了:
~$ echo {1..$(( `cat somefile.dat | wc -l`*2 ))}
{1..8}
这不是我想要的。但是,括号内的内容显然被解释为整数。为什么那么,总结果是一个字符串?我如何将其转换为int,以便将数字1到8作为输出?
答案 0 :(得分:4)
为什么那么,总结果是一个字符串?
这是因为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