Выполнить:
ldd $ (который копает) | grep crypto
, это покажет вам, какую криптографическую библиотеку вы используете в данный момент. Если это отличается от ожидаемого (обычно openssl), у вас есть несколько вариантов:
ldconfig
. Предупреждение: это, скорее всего, сломает приложение, использующее его. Вы можете сохранить значение в $_
, которое установлено в последний аргумент:
if foo; then
: "$(f)"
x=$_
fi
Или можно использовать подоболочку, чтобы съесть отступ:
if foo; then
x=$(
)$(f)
fi
Если вам разрешено использовать здесь -документы, следующий стиль подойдет. Цитирование здесь -строки документа с начальным -
позволяет использовать в вашем коде только табуляции .
Что-то вроде
if true; then
read -d '' -r x <<-EOF
$(f)
EOF
fi
Но помните, что копирование и вставка кода сверху не работает, так как Stack Exchange заменяет табуляцию пробелами. Вам нужно внимательно ввести символ Tab для строк, начинающихся с документа здесь -и строк, заканчивающихся документом здесь -. В моей конфигурации vim
символ табуляции сопоставлен с 8 пробелами. Если вы хотите сделать его еще более аккуратным,измените правило интервала в vim
, установив интервал для табуляции равным 4 пробелам, как:set tabstop=4
Вы можете увидеть, как Вкладка отформатирована в моем скрипте, изучив ее с помощьюsed
$ sed -n l script.sh
#!/usr/bin/env bash$
$
$
f(){$
echo 777$
}$
$
if true; then$
\tread -d '' -r x <<-PERSON$
\t$(f)$
\tPERSON$
fi$
$
echo $x$
Обратите внимание на символы \t
в приведенной выше строке документа -. Если ваш скрипт выглядит иначе, чем приведенный выше, вы увидите неожиданные ошибки EOF
.
Зачем разделять строку по знаку равенства? Вы можете просто задать аргументы функции в отдельной переменной:
unset args
args+='arg1 '
args+='arg2 '
args+='arg3 '
x=$(f $args)
Зачем использовать сложные, трудные конструкции -to -read? Существует совершенно естественный способ представить это, который не требует никаких промежуточных заданий, причудливых способов построения пустой строки, тонкостей цитирования или другой когнитивной нагрузки.
if foo; then
x=$(
a_very_long_command_name --option1='argument 1 is long' \
--option2='argument 2 is long as well'
)
fi