Синтаксис правильный, если не надежный, и проблема заключается в понимании интерполяции строк.В стандартном строковом контексте знак доллара означает для оболочки, что она собирается интерпретировать переменную.Как правило, это означает замену переменной значением переменной.Обратите внимание:
$ 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)