Проблема замены оболочки в Linux Bourne - PullRequest
2 голосов
/ 04 марта 2011

Я пытаюсь использовать подстановку в BS со встроенным пространством имен данных в (очень) маленьком встроенном занятом ящике (нет человека, всего 60 cmds), но я не могу отобразить данные, как только появятся другиеболее 2 данных:

все в порядке :

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

это не соответствует ожидаемым данным независимо от того, какие данные:

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  
...  

Оболочка чтения данных:

#!/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 ...  

ИЗД.как будто там нет ошибки, но файл данных EOL вводит в заблуждение объединение встроенных данных.Я закрываю вопрос и благодарю Денниса за помощь в устранении этой головной боли.

1 Ответ

0 голосов
/ 04 марта 2011

Для сохранения пробела переменные должны быть заключены в кавычки:

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

Однако, почему вы используете echo?

b="${smtp_0} ${smtp_4} ${smtp_5}"
echo "$b"

Кроме того, вы должны использовать отступы в своем коде (или, если это так, вы должны сохранить его при публикации вопросов).

...