我想要一個數組,其中包含1到兩倍於文本文件中行數的數字。在這個例子中,文件somefile.dat有四行。我試過了:如何將字符串轉換爲int在bash中?
~$ echo {1..$((`cat somefile.dat | wc -l`*2))}
{1..8}
這不是我想要的。然而,括號內的內容顯然被解釋爲整數。爲什麼呢,總的結果是一個字符串?我如何將它轉換爲int,以便將數字1到8作爲輸出?
我想要一個數組,其中包含1到兩倍於文本文件中行數的數字。在這個例子中,文件somefile.dat有四行。我試過了:如何將字符串轉換爲int在bash中?
~$ 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
+1避免''eval' with'seq'。 – 2014-09-26 16:57:13
建議使用'WC -l <file'直接得到的數量。那麼你可以做'val = $(wc -l <file)'。 – fedorqui 2014-09-26 16:16:36
在zsh中運行。只是說', – Kevin 2014-09-26 16:17:17
'貓somefile.dat | wc -l | perl -nle'for(1 .. $ _ * 2){print;}'' – chilemagic 2014-09-26 16:17:49