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



我想要一个数组,其中包含文本文件中从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

最新更新