Что это за переменная формы = $ (…)

Если у вас есть nmcli , думаю, это самое простое решение.

Для нового соединения:

nmcli dev wifi connect пароль

Или, если соединение уже было установлено:

nmcli con up

(или если это не работает, попробуйте nmcli con up id )

9
21.01.2017, 14:57
3 ответа

Из руководства по Bash (man bash):

   Command Substitution
       Command substitution allows the output of a command to replace the
       command name.  There are two forms:

              $(command)
       or
              `command`

       Bash performs the expansion by executing command in a subshell
       environment and replacing the command substitution with the standard
       output of the command, with any trailing newlines deleted.  Embedded
       newlines are not deleted, but they may be removed during word
       splitting.  The command substitution $(cat file) can be replaced by the
       equivalent but faster $(< file).

(Это справедливо для всех Bourne-подобных оболочек, т.е. sh, ksh, zsh, bash и др, а zsh также способен перехватывать таким образом данные со встроенными символами NUL)

Команда

basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")

присвоит переменной basedir имя каталога, в котором находится скрипт (при этом все обратные слеши будут заменены на прямые). Любые ошибки, предупреждения или другие диагностические сообщения, которые выводятся в стандартный поток ошибок, будут по-прежнему отображаться на терминале ($(...) захватывает только стандартный вывод команды).

Оболочка начнет с выполнения самой внутренней подстановки команды:

echo "$0" | sed -e 's,\\,/,g'

Вывод этой подстановки будет передан в виде строки dirname, а вывод этой подстановки будет присвоен переменной basedir.

Двойные кавычки нужны для того, чтобы убедиться, что не будет произведена разбивка слов или сглаживание имен файлов, иначе вы можете обнаружить, что скрипт не работает или выдает странные результаты, когда $0 (имя скрипта, включая путь, используемый для его выполнения) содержит символ пробела или символ сглаживания имен файлов (например, ? или *).

В целом, хорошей идеей является всегда заключать в кавычки расширения (расширения переменных, подстановки команд и арифметические расширения). См. этот вопрос и ответы на него для отличного объяснения, почему это хорошая идея.

Если скрипт был выполнен как

$ /usr/local/bin/script.sh

то basedir получит значение /usr/local/bin.

Или, на Cygwin:

$ bash c:\\Users\\Me\\script.sh

тогда basedir получит значение c:/Users/Me. Двойные обратные косые черты в командной строке в этом случае нужны только для того, чтобы убрать одинарные обратные косые черты из оболочки. Фактическое значение $0 - c:\Users\Me\script.sh.

Другой способ сделать то же самое без использования dirname, echo и sed был бы

basedir="${0//\\//}"
basedir="${basedir%/*}"
16
27.01.2020, 20:04

Это означает, что запустить то, что находится внутри круглых скобок , в подоболочке и вернуть это как значение ], в вашем случае присваивая это переменной .

6
27.01.2020, 20:04

varible = $ (..) вызвал подстановку команд , и это означает не что иное, как запустить оболочки и сохранить ее вывод в переменной или отобразить обратно с помощью команды echo. Например, отобразите дату и время:

echo "Today is $(date)"

и для сохранения их в переменной:

SERVERNAME=$(hostname)

Для получения дополнительной информации: https://www.cyberciti.biz/faq/unix-linux-bsd-appleosx-bash -assign-variable-command-output /

5
27.01.2020, 20:04

Теги

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