Установить строку со специальным символом в переменной Unix - PullRequest
0 голосов
/ 06 июня 2018

Мне нужно сохранить в переменной Unix строку, которая может содержать специальные символы.

В моем случае я расшифровываю текст, который возвращает мне Её $ p7 , что мне нужнохранить.Очевидно, что результатом может быть любая строка (например, i * Fi + K'7 ).

Знают ли они, как я могу сохранить тот результат, который я добавляю в переменную, и использую его следующим образом

var = Her $ p7

echo var

в качестве примера?

Я использую это для получения строки

echo "`${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}'`"|perl -e print

1 Ответ

0 голосов
/ 06 июня 2018

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

$ t1=Her$p7
$ t2="Her$p7"
$ t3='Her$p7'
$ t4="$(echo 'Her$p7')"
$ echo "t1: $t1; t2: $t2; t3: $t3, t4: $t4"
t1: Her; t2: Her; t3: Her$p7; t4: Her$p7

Обратите внимание, что при установке t1 (первая строка) и t2, $p7 интерпретировалось как переменная (которую вы не установили) и, следовательно, была заменена наэто значение (пусто / ничего).Так, t1 и t2 были установлены в значение Her<nothing> -> Her.

В третьем случае мы использовали одинарные кавычки, чтобы сказать оболочке: «Нет интерполяции, пожалуйста; я имею в виду строгочто я сказал".Таким образом, t3 устанавливается точно на введенную вами строку.

В последнем случае мы используем оператор subshell ($( ... )), чтобы установить переменную t4 для вывода команды subshell.В этом случае мы используем двойные кавычки, чтобы убедиться, что мы захватили весь вывод, но поскольку мы не вводим переменную $p7, оболочка не будет интерполировать вывод команды.

Итак,Вы должны быть хороши, чтобы пойти с чем-то вроде:

$ yourVar=$(echo "`${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}'`" | perl -e print)

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

$ yourVar=$(echo "$(${FDL_HOME}/bin/cypher2 DEC ${CF_KEYPFX} ${CF_KEYLEN} ${CF_PASS}== | grep "decrypt text" | gawk -F': ' '{print $2}')" | perl -e print)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...