Назначьте переменную с использованием нескольких строк

Выполнить: ldd $ (который копает) | grep crypto , это покажет вам, какую криптографическую библиотеку вы используете в данный момент. Если это отличается от ожидаемого (обычно openssl), у вас есть несколько вариантов:

  1. Удалить мешающую библиотеку
  2. Изменить переменную env LDD_LIBARY_PATH и указать местоположение библиотеки openssl
  3. Устранить проблему, удалив ненужную библиотеку ' расположение из файлов /etc/ld.so.conf и /etc/ld.so.cond.d/*. Затем запускаем ldconfig . Предупреждение: это, скорее всего, сломает приложение, использующее его.
4
31.10.2018, 05:26
4 ответа

Вы можете сохранить значение в $_, которое установлено в последний аргумент:

if foo; then
    : "$(f)"
    x=$_
fi

Или можно использовать подоболочку, чтобы съесть отступ:

if foo; then
    x=$(
    )$(f)
fi
3
27.01.2020, 20:45

Если вам разрешено использовать здесь -документы, следующий стиль подойдет. Цитирование здесь -строки документа с начальным -позволяет использовать в вашем коде только табуляции .

Что-то вроде

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.

2
27.01.2020, 20:45

Зачем разделять строку по знаку равенства? Вы можете просто задать аргументы функции в отдельной переменной:

unset args
args+='arg1 '
args+='arg2 '
args+='arg3 '
x=$(f $args)
2
27.01.2020, 20:45

Зачем использовать сложные, трудные конструкции -to -read? Существует совершенно естественный способ представить это, который не требует никаких промежуточных заданий, причудливых способов построения пустой строки, тонкостей цитирования или другой когнитивной нагрузки.

if foo; then
    x=$(
      a_very_long_command_name --option1='argument 1 is long' \
                               --option2='argument 2 is long as well'
    )
fi
11
27.01.2020, 20:45

Теги

Похожие вопросы