2014-09-26 47 views
3

我想要一個數組,其中包含1到兩倍於文本文件中行數的數字。在這個例子中,文件somefile.dat有四行。我試過了:如何將字符串轉換爲int在bash中?

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

這不是我想要的。然而,括號內的內容顯然被解釋爲整數。爲什麼呢,總的結果是一個字符串?我如何將它轉換爲int,以便將數字1到8作爲輸出?

+0

建議使用'WC -l <​​file'直接得到的數量。那麼你可以做'val = $(wc -l <​​file)'。 – fedorqui 2014-09-26 16:16:36

+0

在zsh中運行。只是說', – Kevin 2014-09-26 16:17:17

+0

'貓somefile.dat | wc -l | perl -nle'for(1 .. $ _ * 2){print;}'' – chilemagic 2014-09-26 16:17:49

回答

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 
+2

+1避免''eval' with'seq'。 – 2014-09-26 16:57:13