2012-01-09 1 views
0

У меня эта проблема, я не могу опустить голову.Переменная в заявлении backtick

FILE_PROPERTIES="info.txt" 

echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"` 

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

Или в более общем виде, как можно было бы вызвать переменную в `` инструкции, чтобы она преобразуется для вывода? Я пробовал без {}, без везения.

+0

В какой среде это? Тег «batch» предназначен для пакетных файлов Windows, но это не похоже на синтаксис пакета Windows. –

+0

@CheranShunmugavel спасибо! неправильно, я обновил тег. – y2k

+1

Здесь работает (bash 4.1.10). Вероятно, зависит от типа оболочки и возможной версии. Работает ли 'export FILE_PROPERTIES =" info.txt "? –

ответ

1

То, как вы это делаете, должно работать. Например, следующее должно (попытаться) получить доступ к info.txt и something_else.txt. Обратите внимание, что две команды echo идентичны.

#!/bin/sh 

FILE_PROPERTIES="info.txt" 
echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"` 

FILE_PROPERTIES="something_else.txt" 
echo `grep "ENVOI_MAIL=" ${FILE_PROPERTIES} | cut -d "=" -f "2"` 

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

echo `grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2"` 

Кроме того, большинство современных оболочек поддерживают $(...) синтаксис, который немного лучше, чем форма кавычки (с одной стороны, он может быть вложенными):

echo $(grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2") 

Наконец, echo, вероятно, не является необходимым, если вы на самом деле не нуждаются в лечении echo «s белого пространства. Вы можете попробовать это вместо:

grep "ENVOI_MAIL=" "${FILE_PROPERTIES}" | cut -d "=" -f "2" 

(я не проверял все эти команды, так что следите за опечаток.) ​​

+0

Спасибо за этот ясный, исчерпывающий и информативный ответ! Помог мне хорошо понять, что происходит. Сейчас работает сейчас под партию 0403-010. – y2k