2014-12-02 2 views
0

У меня проблема с печатью двух переменных с использованием эха. Ниже приведен фрагмент кода из сценария: -Проблема при печати переменных с использованием эха

tdaydatefile=$(date +'%m%d%Y') 
ip=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}') 
echo "Dumping all network connections to $HOME/MyLog/netstat_$ip_$tdaydatefile.csv!" 

Когда скрипт запускается, он только печатает ниже: -

Dumping all network connections to /root/MyLog/netstat_12022014.csv! 

Он не печатает IP-адрес (IP) переменную из система. Если я заменил ip на tdaydatefile в echo, он печатает ip и игнорирует переменную tdaydatefile.

Любая идея, что может быть неправильным здесь?

+0

'ip_' - допустимое имя переменной, s вы сбрасываете неопределенную переменную. попробуйте '{$ ip}' или переключитесь на использование тире, '...- $ ip- $ tday' вместо этого. –

+0

Вы должны пометить это с помощью языка, который вы используете. – Scimonster

+2

@MarcB: Я думаю, вы имеете в виду 'netstat _ $ {ip} _ $ tdaydatefile', где открытая скобка идет после $ и до имени переменной. –

ответ

2

С _ является допустимым символом имени переменной, вам нужно указать оболочку, где заканчивается ваше имя переменной. (В коде, оболочка интерпретирует ip_ как имя переменной.)

Это можно сделать, заключив имя переменной в {...}, т.е. использовать ${ip} в этом случае:

echo "Dumping all network connections to $HOME/MyLog/netstat_${ip}_$tdaydatefile.csv!" 

Обратите внимание, что это не необходимо с $HOME или $tdaydatefile, потому что / и . не являются допустимыми символами имен переменных.

Если у вас есть сомнения, используйте ${...} —, что также помогает читать.

+0

Локальное кодирование в офисе - это «все имена имен переменных, всегда заключенные в' $ {name} '". Я не очень увлечен этим, но он систематичен и может быть исправлен автоматически. –

+0

@JonathanLeffler: Лично я делаю это только тогда, когда это технически необходимо и для чтения в расширяющихся строках, потому что фигурные скобки неловко печатаются. Повторите свое редактирование: хотя, вероятно, не нужно в таком коротком ответе, я нахожу смелые ключевые отрывки полезными, чтобы быстро привлечь внимание к * gist * сообщения; это метод, который я использую при создании заметок для личного использования. – mklement0

+0

Стиль сложный. В основном я использую '$ variable', а не' $ {variable} 'в моем собственном коде, но в правиле, введенном на работе, есть некоторая мудрость. Стиль форматирования ответов также сложный, но сохранение смелости до минимума - это, как правило, хорошая идея, но и очень субъективная. –

Смежные вопросы