2013-02-07 30 views
-1
#/bin/sh 
INPUT_ETH="eth0,eth1,eth2,eth3" 
i=0 
for eth in $(echo $INPUT_ETH | tr "," "\n") 
do 

eth_$i=$eth 

echo "$eth_$i" 

i=`expr $i + 1` 

if [ $eth_$i = $BLA_BLA] 

    then; 
     .............. 
    fi 
     done 

* SH split.sh * *串分割輸出不存儲到單獨的變量

split.sh:找不到

命令

split.sh:eth_0 eth_1 :command not found

split.sh:eth_2:command not found

split.sh:eth_3:command not found

final output shold be .. in variable「eth_0」the string valu shold be「eth0」same as for eth_1 .... eth_2 etc..etc ...在此之後我想打一個循環在這個變量下eth_0,eth_1等

+0

如果你正在使用bash,你可以這樣做:'在$ {// INPUT_ETH,/}',而不是使用'tr' ETH。 –

+0

好@WilliamPursell n guyz *請不要建議數組* –

回答

0

你不能在分配的空間,也可以使用名稱的變量沒有eval

eth_$i = $eth 

必須寫成:

eval eth_$i=$eth 

Bash script variable declaration - command not found

至於第二個問題,你可以這樣做:

if eval test $eth_$i = blah; then 

或(和你又需要更多的空格):

if eval [ $eth_$i = blah ]; then 

順便說一句,這兩個chepner和格倫傑克曼對於使用數組是正確的。我會再走一步,說你可能不應該這樣做。任何時候你想訪問你正在構建的這些變量,只需改寫原始字符串。

+0

我試過這個..但同樣的錯誤 –

+0

這是$ i的問題!我想將它們存儲到不同的變量中。 –

+0

@ user95711更新回答:您必須使用eval –

1

這是威廉Pursell的答案的擴展,如果你實際使用bash,並不僅限於sh

#!/bin/bash 

INPUT_ETH=(eth0 eth1 eth2 eth3) 
for eth in ${INPUT_ETH[@]} 
do 
    echo "$eth" 


    if [[ $eth = $BLA_BLA ]] 
    then; 
     .............. 
    fi 
done 

使用一個真正的數組,而不要打擾試圖與動態變量來模擬他們名。

如果你真的必須,bash還提供了declare命令,這是較安全eval,因爲它無法執行任意代碼:它只是進行參數擴展,並設置一個變量的值:

declare "eth_$i=$eth" 
0

假設的bash:

分割字符串到一個數組

INPUT_ETH="eth0,eth1,eth2,eth3" 
IFS=, read -a eth <<< "$INPUT_ETH" 
for ((i=0; i<${#eth[@]}; i++)); do echo "$i - ${eth[$i]}"; done 

輸出

0 - eth0 
1 - eth1 
2 - eth2 
3 - eth3 

用於創建動態的變量名,使用declare

declare eth_$i=$eth 

但是,使用動態的變量名往往使你的生活更加困難。使用數組,這是他們擅長的。

+0

我的bash版本太舊,所以我不能使用數組 –

0

正如其他人所說的只是在名單上循環。

這樣做的老式方法是使用IFS

#/bin/sh 
INPUT_ETH="eth0,eth1,eth2,eth3" 
OFS=$IFS IFS=, 
set -- $INPUT_ETH 
IFS=$OFS 
BLA_BLA=eth2 
for eth in $*; do 
    if [ $eth = $BLA_BLA ] ; then 
     echo "$eth OK - now work." 
    else 
     echo "$eth ignored" 
    fi 
done 

輸出:

eth0 ignored 
eth1 ignored 
eth2 OK - now work. 
eth3 ignored 
+0

你沒有得到我的問題。它說我想分割成varios部分,並將它們存儲到單獨的變量,如「eth_0」,「eth_1」等...這裏的_0和_1是另一個變量值.. lkets說$ i ....意思是變量應該是「$ eth_ $ i」它唯一的一個變量這裏我錯了)..現在我想要這個變量的值,所以我怎樣才能使用它? –

+0

實際上你的例子中說:「eth_list中的foreach eth ...做......」,目前還不清楚爲什麼你會想要bui ld vars叫做''eth_1 .. eth_(n)'',因爲當你在循環之外時,你怎麼知道你有多少。你需要修改你的問題來說明爲什麼你需要創建''eth_1''等等,因爲你的問題看起來你所要做的只是循環「eth_list」 - 看起來沒有什麼好處這些''eth_1''等等,很難想象爲什麼你想要這樣做,而不僅僅是在列表中循環。請將您的問題擴展到下一個邏輯部分。 – sotapme