2012-08-10 26 views
2

在bash腳本中,我想迭代一列我想作爲參數傳遞給python腳本的值。事實證明,$d$minFreq傳遞給python腳本時不是浮動的。爲什麼會發生?bash:遍歷浮動數字列表

for d in {0.01, 0.05, 0.1} 
do 
    for i in {1..3} 
    do 
     someString=`python scrpt1.py -f myfile --delta $d --counter $i| tail -1` 
     for minFreq in {0.01, 0.02} 
     do 
      for bValue in {10..12} 
      do 
       python testNEW.py $someString -d $bValue $minFreq 
      done 
     done 
    done 
done 
+0

丟失'someString = $(python ...)'行中的等號周圍的空格(將back-ticks替換爲'$(...)',因爲獲取back-ticks到註釋中作爲back- – 2012-08-10 13:34:34

+0

好的呼叫,我剛剛在五分鐘前意識到同樣的東西! – 2012-08-10 13:36:30

回答

8

要麼刪除空格

for d in {0.01,0.05,0.1} 

或不使用{}擴展(這是沒有必要在這裏):

for d in 0.01 0.05 0.1 

這同樣適用於minFreq循環。


作爲寫入,

for d in {0.01, 0.05, 0.1} 

可變d被分配了文字串值{0.01,0.05,,並0.1}

+0

雖然擴展中的空間是不必要的,但我認爲Python進程根本不應該看到它們。在構造參數列表時刪除空格,因爲shell變量沒有被引用 – 2012-08-10 15:35:45

+0

空格防止大括號擴展發生,所以大括號和逗號不是語法,但包含在傳遞給python的字符串中 – chepner 2012-08-10 15:38:29

+0

愛得正交 - 感謝您提供的信息;我沒有嘗試過,正如您所看到的。 – 2012-08-10 15:40:20