Вывод строки с переменной в ней без ее расширения / оценки [закрыто]


12

Я искал везде. Пробовал эхо и печатал. Пробовал одинарные и двойные кавычки. Но я проанализировал данные и присвоил их переменной, а затем хотел бы оценить, есть ли в них переменная. Затем я заменю переменную подстановочным знаком и произведу поиск файла.

Пример:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

Вот как минимум один из моих многочисленных провалов:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

Я знаю, что это как-то связано с расширением, но понятия не имею, как это сделать. Любая помощь будет оценена. Спасибо!


Что вам нужно решить? Что вар содержат нераскрытый $date? Для этого применения: var='file.$DATE.txt'. Расширить дату, когда используется var? Я уверен, что вам нужно объяснить, что вы спрашиваете.

Извините, чтобы проверить, определена ли переменная в переменной "var". Гнездо сортов.
krmarshall87

Я нашел способ обойти мою дилемму, немедленно удалив все, что кажется переменным (не заботясь сначала о том, что мне нужно), и поменяв его местами подстановочным знаком: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

Ответы:


20

Если вам нужно $dateвнутри переменной var:

var='file.$date.txt'

Это будет держать $ внутри переменной:

$ echo "$var" | grep '\$'
file.$date.txt

8

Используйте одинарные кавычки вокруг переменных, чтобы предотвратить расширение оболочки. Пример echo '$file'не будет расширяться $file.

Изменить после комментария ниже:

Вы можете избежать $знака int в varпеременной с помощью var="file.\$DATE.txt".


Мне нужно, чтобы расширить, но только один уровень. Забыл добавить пошаговый желаемый результат. Но я бы хотел, чтобы содержимое файла $ оценивалось на знак доллара ($ DATE).
krmarshall87

Отредактировано, чтобы решить это.
Мунир

Я получаю эти данные из внешнего источника. Я думаю, что даже для замены $ на \ $ потребуется эхо. ОДНАКО, дай мне посмотреть, смогу ли я сжать его, когда я его анализирую.
krmarshall87
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.