2011-03-04 44 views
2

我想在一個非常小的嵌入式busybox(沒有人,總共60 cmds)內建立數據命名空間的BS中使用替代,但我無法將數據作爲回顯一旦有超過2個數據附和道:Linux的Bourne shell替換問題

這是確定

a=$(echo -e ${smtp_0} ${smtp_4}) 
echo $a 
# returns: "0 4" as expected, also all individually printed datas are echoed as expected 

這並不回聲預期DATAS任何數據是:

b=$(echo -e ${smtp_0} ${smtp_4} ${smtp_5}) 
echo $b 
# returns: "54" , same with double-quotes (Nok, it should return "0 4 5") 

的數據都是建立這樣的:

「數據文件樣本」

val0=1 
val1=1 
... 

閱讀DATAS殼:

#!/bin/sh 
x=0 
while read line 
do 
    # fetch values, removing blank and commented lines, eg keeping only lines starting with data namespace 
    formatted_line=$(echo $line | sed -e "/^[^a-z].*$/d" | cut -d= -f2) 

    # store file's value into a data array-like 
    if [ ! -z $formatted_line ];then 
     eval "`echo $x | sed -e 's/.*/smtp_&=$formatted_line/'`" 
     x=$(($x+1)) 
    fi 
done < $DATA_FILE 

# Then try echoing datas... 
# ... see above ... 

編輯: 所以它看起來像有在有nthg誤但數據文件EOL誤導了內置數據的串聯。我關閉了這一點,然後向Dennis幫助解決這個頭痛問題。

回答

0

保留空白,變量應該被引用:

b=$(echo -e "${smtp_0} ${smtp_4} ${smtp_5}") 
echo "$b" 

但是,爲什麼您使用echo?另外,你應該在你的代碼中使用縮進(或者如果你是那麼你應該在發佈問題時保留它)。

+0

我也試過用雙引號,同樣的問題。編輯:是的,這給出了相同的輸出W/O「回聲」。我也嘗試在命令行中,它的工作原理,如果我這樣做:a = 0; B = 1; C = 2; d = $(echo $ {a} $ {b} $ {c});回聲$ d。所以我想這個問題來源於構建的數據命名空間。 – hornetbzz 2011-03-04 01:51:28

+0

基於[this](http://stackoverflow.com/questions/3294864/bourne-shell-how-to-concatenate-variables-that-need-to-be-evaluated),它看起來像點是一個串聯我還無法解決的問題。 – hornetbzz 2011-03-04 02:38:12

+0

@hornetbzz:您可能會發現[BashFAQ/006](http://mywiki.wooledge.org/BashFAQ/006)有幫助。它有一些關於在非Bash shell如Bourne中使用間接的信息。 – 2011-03-04 03:34:11