Я пишу документацию и предпочитаю использовать длинные параметры, поскольку они --output-document=
более понятны, чем их краткие аналоги -O
.
Затем мне нужно указать файл в домашнем каталоге, но ~
при попытке выполнить символ происходит сбой --output-document=~/.vimrc
.
Мне действительно нужно использовать длинный параметр, но мне также нужно указать путь, который автоматически содержит домашний каталог.
Итак, есть ли решение, которое не использует синтаксис вроде /home/<your name>/
?
решение1
Расширение тильды работает только в начале слова. (По крайней мере в bash, см. напримерhttps://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html)
Вы можете использовать, скажем, --something=$HOME/filename
если вам нужно только сослаться на домашний каталог текущего пользователя. Поскольку --output-document
принимает обязательный аргумент, запись аргумента в отдельной опции тоже работает, но для необязательных аргументов это, похоже, не работает (*), поэтому вы, вероятно, захотите использовать формат --foo=bar
usual.
Если контекст — документация, может быть полезно хотя бы упомянуть соответствующие короткие параметры, поскольку их короче писать, и ваши читатели в любом случае могут наткнуться на них в коде, написанном другими. Особенно для распространенных параметров, таких как wget -O
.
(* Например, попробуйте ls --color=auto
вместо ls --color auto
. Я сказал «кажется», поскольку самое прямое упоминание об этом, которое я смог найти, — это страница руководства программы командной строки getopt
, документация библиотеки не столь ясна.)
решение2
Насколько я знаю, знака «=» там быть не должно...
wget --option-document ~/.vimrc
решение3
Я бы не использовал тильду ни в документации, ни «в гневе», но если вам действительно нужна тильда, выможетсделать одно из двух
VAR=~/.vimrc; wget ... --output-document="$VAR"
unset VAR # to keep things tidy
# or put in ( subshell ) to keep pre-existing VAR
# quotes only needed if $HOME (or anything you substitute for .vimrc)
# can contain whitespace or glob characters ?*[ which is pretty rare
wget ... --output-document="$(echo ~/.vimrc)"
# or if $HOME can begin with - or contain backslash, also pretty rare:
wget ... --output-document="$(printf '%s\n' ~/.vimrc)"
# both times quotes as above