如何在bash中将字符串转换为int?

时间:2014-09-26 16:13:35

标签: bash

我想要一个数组,其中包含文本文件中行数为1到两倍的数字。在此示例中,文件somefile.dat有四行。我试过了:

~$ echo {1..$(( `cat somefile.dat | wc -l`*2 ))}
{1..8}

这不是我想要的。但是,括号内的内容显然被解释为整数。为什么那么,总结果是一个字符串?我如何将其转换为int,以便将数字1到8作为输出?

1 个答案:

答案 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