2016-08-10 1 views
-1

Я пытаюсь использовать одну переменную для генерации второй переменной. Однако он обрабатывает символ подчеркивания после переменной как части переменной. Как заставить его распознавать переменную в этой ситуации?Как использовать достоверное мгновенно перед подчеркиванием в сценарии ожидания?

Ошибка

can't read "v_host_": no such variable 
    while executing 
"set v_log_file "/some/loc/dir_$v_host_*/file.log"" 
    (file "./test.exp" line 3) 

Ожидать Сценарий:

#!/usr/bin/expect -f 
... 
set v_host [lindex $argv 0] 
set v_log_file "/some/loc/dir_$v_host_*/file.log" 

Update: скопировал правильное сообщение об ошибке.

ответ

2

В файле вы фактически сказать:

set v_log_file "/some/log/dir_"$v_host"_*/file.log" 

Это не юридический код Tcl. Если вы используете двойные кавычки, вам нужно поместить их вокруг всего слова; это разные в bash. Вместо этого, вы делаете это:

set v_log_file "/some/log/dir_${v_host}_*/file.log" 

То есть, поставив скобки вокруг имени переменной, чтобы отличить его от остальной части строки. Или вы можете построить строку по частям с append, чьим первым аргументом является именем переменного (такого же, как и с set):

set v_log_file "/some/log/dir_" 
append v_log_file $v_host 
append v_log_file "_*/file.log" 

Оба подхода является действительным. (Я предпочитаю первый из двух рабочих подходов, но YMMV.)

+1

Возможно, вы захотите уточнить, что «первое» в вашем последнем предложении относится к использованию фигурных скобок, а не к первой строке, которую вы упоминаете (что является незаконным). –

+0

Спасибо, используя фигурные скобки, немного почистит мой скрипт. – ScrappyDev

0

Я пробовал concat и присоединился, но по какой-то причине он по-прежнему добавлял пробелы.

В итоге я использовал append и получил ожидаемый результат.

Использование Append:

#!/usr/bin/expect -f 
... 
set v_host [lindex $argv 0] 
set v_log_file "/some/loc/dir_" 
append v_log_file "$v_host" "_*/file.log" 

Результат:

/some/loc/dir_hostname_*/file.log 

Обновлено Исправлена ​​опечатка, что Петр Lewerin пойманы.

+1

Вы уверены? Я спрашиваю, потому что первый аргумент 'append' должен быть именем переменной (другие аргументы добавляются к значению переменной, например' append v_log_file $ v_host _ */file.log'). 'set v_log_file"/some/loc/dir _ $ {v_host} _ */file.log "' проще. –

+0

Использование фигурных скобок не сработало (одна из первых вещей, которые я пробовал) – ScrappyDev