2013-06-10 8 views
2

Всякий раз, когда я пытаюсь использовать одну переменную для создания другой, я получаю неожиданные результаты. Я немного сузил его, но мог немного помочь в том, что здесь происходит. Мой местный сценарий делает это:Переменная не установлена ​​должным образом

CUR_TIME=$(date "+%Y%m%d_%HH%MM%SS") 
CUR_TIME="build_"$CUR_TIME 

Это дает мне желаемые результаты. Тем не менее, всякий раз, когда я пытаюсь использовать это, чтобы построить еще одну переменную или эхо что-то, содержащее эту переменную:

echo "/home/path/blah/$CUR_TIME" 

Мой результат только Echos в $CUR_TIME переменной обратно. Что здесь происходит?

Переменная $CUR_TIME устанавливается на моей локальной сессии оболочки, я получаю дополнительные переменные с удаленного сервера через SSH как этот additional_vars=$(ssh [email protected] "cat variables.properties")

тогда я eval $addtional_vars. $additional_vars включает в себя довольно много переменных, и их эхо их индивидуально отлично работает.

Так я тогда строить или эхо из новой переменной, используя этот формат:

echo "/home/path/blah/$additional_var1/" 

Это перекликается правильно, но если я делаю это (реверс):

echo "/$additional_var1/home/path/blah" 

Мой результат просто /home/path/blah ,

EDIT

После дальнейшего устранения неполадок это выглядит, как если бы я включил любой моего Варса от $additional_vars к имени пути и поставить его перед чем я указую, это приводит к той части пути, по которому нулю , Так что это не только переменная $CUR_TIME. Что странно, так это то, что эхо-сигнал $additional_var в порядке.

Мой .properties файл выглядит следующим образом:

var1="something" 
var2="something2" 
var3="something3" 
var3="ftp://something/another/$something_else" 
var4="something.something" 

Если я испытываю eval $additional_vars используя printf ${additional_vars} | hexdump -C, мои выходные результаты в шестнадцатеричное значение, а затем |var1="something".|

+1

Есть ли у вас какие-либо управляющие последовательности ANSI в ваших '$ {additional_var}' iables? Можете ли вы предоставить конкретный, минимальный пример, который терпит неудачу, на котором вы можете размещать содержимое переменных? –

+0

@ AdrianFrühwirth Нет, не знаю. : -/ –

+0

И на самом деле есть только одна косая черта? –

ответ

1

Первое, что я делал, было это:

additional_vars=$(ssh [email protected] "cat variables.properties") 

Если я затем повторил эту переменную, он показал многострочную переменную, содержащую эту информацию:

var1="something" 
var2="something2" 
var3="something3" 
var3="ftp://something/another/$something_else" 
var4="something.something" 

Так были некоторые странные вещи происходят, когда я бегу eval $additional_vars, оказавшиеся идти построчно и назначение переменных, назначенных в variables.properties, потому что, если я тогда повторил переменные, это было прекрасно. Но использование их дало интересные результаты, о которых я упомянул в своем посте.

Я закончил тем, что делал это, чтобы заставить его работать:

additional_vars=$(ssh [email protected] "cat variables.properties") 

printf %s "$additional_vars" | while IFS= read -r line 
do 
    eval $line 
done 

Это прояснилось каждый вопрос, но я не знаю, почему это работает по-другому.

В качестве альтернативы, можно также сделать следующее:

for line in $additional_vars 
do 
    eval $line 
done 
Смежные вопросы