Отключение звука YouTube при использовании наушников Bluetooth на Fedora

По сути, вы должны использовать двойные кавычки для раскрытия переменных, чтобы защитить их от разбиения на слова (и создания имени файла ). Однако в вашем примере

wget_options='--mirror --no-host-directories'
wget $wget_options --directory_prefix="$local_root" "$remote_root$relative_path"

разбиение слов — это именно то, что вам нужно .

С"$wget_options"(цитируется ), wgetне знает, что делать с единственным аргументом --mirror --no-host-directoriesи жалуется

wget: unknown option -- mirror --no-host-directories

Чтобы wgetувидел две опции --mirrorи --no-host-directoriesкак отдельные, должно произойти разделение слов.

Есть более надежные способы сделать это. Если вы используете bashили любую другую оболочку, использующую массивы, подобные bash, см. ответ glenn jackman . Ответ Жиля дополнительно описывает альтернативное решение для более простых оболочек, таких как стандартная /bin/sh. Оба по существу сохраняют каждую опцию как отдельный элемент в массиве.

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


Двойное заключение переменных в кавычки — хорошее практическое правило. Сделай это . Тогда помните о очень немногих случаях, когда этого делать не следует. Они будут представлены вам через диагностические сообщения, такие как приведенное выше сообщение об ошибке.

Есть также несколько случаев, когда вам не нужно заключать раскрытия переменных в кавычки. Но в любом случае проще продолжать использовать двойные кавычки, так как это не имеет большого значения. Один из таких случаев

variable=$other_variable

Другой

case $variable in
   ...)... ;;
esac

1
25.10.2018, 19:18
0 ответов

Теги

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