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幫助解決這個頭痛問題。
我也試過用雙引號,同樣的問題。編輯:是的,這給出了相同的輸出W/O「回聲」。我也嘗試在命令行中,它的工作原理,如果我這樣做:a = 0; B = 1; C = 2; d = $(echo $ {a} $ {b} $ {c});回聲$ d。所以我想這個問題來源於構建的數據命名空間。 – hornetbzz 2011-03-04 01:51:28
基於[this](http://stackoverflow.com/questions/3294864/bourne-shell-how-to-concatenate-variables-that-need-to-be-evaluated),它看起來像點是一個串聯我還無法解決的問題。 – hornetbzz 2011-03-04 02:38:12
@hornetbzz:您可能會發現[BashFAQ/006](http://mywiki.wooledge.org/BashFAQ/006)有幫助。它有一些關於在非Bash shell如Bourne中使用間接的信息。 – 2011-03-04 03:34:11