Работы карты WI-FI Intel лучше всего, их драйверы непосредственно включены в ядро, также могут быть загружены как отдельный пакет с его официального сайта.
Иногда Вы, возможно, должны были бы загрузить встроенное микропрограммное обеспечение также.
Этот метод позволяет присвоить переменной значение, если другая переменная либо пуста, либо не определена. ПРИМЕЧАНИЕ: Эта «другая переменная» может быть той же или другой переменной.
выдержка
${parameter:-word}
If parameter is unset or null, the expansion of word is substituted.
Otherwise, the value of parameter is substituted.
ПРИМЕЧАНИЕ: Эта форма также работает, $ {параметр-слово}
. Если вы хотите увидеть полный список всех форм расширения параметров, доступных в Bash, я настоятельно рекомендую вам взглянуть на эту тему в вики Bash Hacker под названием: « Расширение параметров ».
$ echo "$VAR1"
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
default value
переменная существует
$ VAR1="has value"
$ echo "$VAR1"
has value
$ VAR1="${VAR1:-default value}"
$ echo "$VAR1"
has value
То же самое можно сделать, оценив другие переменные или запустив команды в части значения по умолчанию в нотации.
$ VAR2="has another value"
$ echo "$VAR2"
has another value
$ echo "$VAR1"
$
$ VAR1="${VAR1:-$VAR2}"
$ echo "$VAR1"
has another value
Вы также можете использовать немного другую запись, где это просто VARX = $ {VARX-
.
$ echo "${VAR1-0}"
has another value
$ echo "${VAR2-0}"
has another value
$ echo "${VAR3-0}"
0
В приведенном выше $ VAR1
и $ VAR2
уже были определены со строкой «имеет другое значение», но $ VAR3
не было определено, поэтому значение по умолчанию вместо этого использовалось 0
.
$ VARX="${VAR3-0}"
$ echo "$VARX"
0
: =
нотации Наконец, я упомяну удобный оператор : =
. Это выполнит проверку и присвоит значение, если проверяемая переменная пуста или не определена.
Обратите внимание, что теперь установлено значение $ VAR1
. Оператор : =
выполнил проверку и присвоение за одну операцию.
$ unset VAR1
$ echo "$VAR1"
$ echo "${VAR1:=default}"
default
$ echo "$VAR1"
default
Однако, если значение установлено ранее, оно остается в покое.
$ VAR1="some value"
$ echo "${VAR1:=default}"
some value
$ echo "$VAR1"
some value
Личный опыт.
Иногда я использую этот формат в своих сценариях для произвольного переопределения значений, например если у меня есть:
$ cat script.sh
SOMETHING="${SOMETHING:-something}"; echo "$SOMETHING";
, я могу запустить:
$ env SOMETHING="something other than the default value" ./script.sh`
без изменения исходного значения по умолчанию ЧТО-ТО
.
@slm уже включает документы POSIX , которые очень полезны, но они не раскрывают, как эти параметры могут быть объединены, чтобы повлиять на один Другой.Здесь еще нет упоминания об этой форме:
${var?if unset parent shell dies and this message is output to stderr}
Это отрывок из другого моего ответа , и я думаю, он очень хорошо демонстрирует, как они работают:
sh <<-\CMD
_input_fn() { set -- "$@" #redundant
echo ${*?WHERES MY DATA?}
#echo is not necessary though
shift #sure hope we have more than $1 parameter
: ${*?WHERES MY DATA?} #: do nothing, gracefully
}
_input_fn heres some stuff
_input_fn one #here
# shell dies - third try doesnt run
_input_fn you there?
# END
CMD
heres some stuff
one
sh: line :5 *: WHERES MY DATA?
Другой пример из same :
sh <<-\CMD
N= #N is NULL
_test=$N #_test is also NULL and
v="something you would rather do without"
( #this subshell dies
echo "v is ${v+set}: and its value is ${v:+not NULL}"
echo "So this ${_test:-"\$_test:="} will equal ${_test:="$v"}"
${_test:+${N:?so you test for it with a little nesting}}
echo "sure wish we could do some other things"
)
( #this subshell does some other things
unset v #to ensure it is definitely unset
echo "But here v is ${v-unset}: ${v:+you certainly wont see this}"
echo "So this ${_test:-"\$_test:="} will equal NULL ${_test:="$v"}"
${_test:+${N:?is never substituted}}
echo "so now we can do some other things"
)
#and even though we set _test and unset v in the subshell
echo "_test is still ${_test:-"NULL"} and ${v:+"v is still $v"}"
# END
CMD
v is set: and its value is not NULL
So this $_test:= will equal something you would rather do without
sh: line 7: N: so you test for it with a little nesting
But here v is unset:
So this $_test:= will equal NULL
so now we can do some other things
_test is still NULL and v is still something you would rather do without
В приведенном выше примере используются все 4 формы подстановки параметров POSIX и их различные : двоеточие null
или not null
. Дополнительная информация приведена по ссылке выше, и здесь снова .
Еще одна вещь, о которой люди часто не задумываются о $ {parameter: + extension}
, - это то, насколько она может быть очень полезной в документе здесь. Вот еще один отрывок из другого ответа :
Здесь вы установите некоторые значения по умолчанию и подготовитесь к их печати при вызове ...
#!/bin/sh
_top_of_script_pr() (
IFS="$nl" ; set -f #only split at newlines and don't expand paths
printf %s\\n ${strings}
) 3<<-TEMPLATES
${nl=
}
${PLACE:="your mother's house"}
${EVENT:="the unspeakable."}
${ACTION:="heroin"}
${RESULT:="succeed."}
${strings:="
I went to ${PLACE} and saw ${EVENT}
If you do ${ACTION} you will ${RESULT}
"}
#END
TEMPLATES
Здесь вы определяете другие функции для вызова вашей функции печати на основе их результатов ...
EVENT="Disney on Ice."
_more_important_function() { #...some logic...
[ $((1+one)) -ne 2 ] && ACTION="remedial mathematics"
_top_of_script_pr
}
_less_important_function() { #...more logic...
one=2
: "${ACTION:="calligraphy"}"
_top_of_script_pr
}
Теперь у вас все настроено, поэтому здесь вы выполните и получите свои результаты.
_less_important_function
: "${PLACE:="the cemetery"}"
_more_important_function
: "${RESULT:="regret it."}"
_less_important_function
Я сейчас объясню почему, но выполнение вышеуказанного дает следующие результаты:
первый запуск _less_important_function () :
Я пошел в дом вашей матери и увидел Дисней на льду.
Если вы занимаетесь каллиграфией , у вас все получится.
затем
_more_important_function ():
Я пошел на кладбище и увидел Дисней на льду.
Если вы выполните лечебную математику , вы добьетесь успеха.
_less_important_function ()
снова:Я пошел на кладбище и увидел Дисней на льду.
Если вы выполните лечебную математику, вы пожалеете об этом.
Ключевой особенностью здесь является концепция условного расширения $ {parameter}.
Вы можете установить для переменной значение только в том случае, если оно не установлено или равно нулю, используя форму:
$ {var_name
: =желаемое_значение}
Если вместо этого вы хотите установить только неустановленное значение переменной, вы должны опустить : двоеточие
, и нулевые значения останутся такими, как есть.
Вы могли заметить, что в приведенном выше примере $ PLACE
и $ RESULT
изменяются при установке с помощью расширения параметра
, хотя _top_of_script_pr ()
уже был вызван, предположительно устанавливая их при запуске. Причина, по которой это работает, заключается в том, что _top_of_script_pr ()
- это функция (без оболочки)
- я заключил ее в скобки
, а не в {фигурные скобки}
для остальных. Поскольку он вызывается в подоболочке, каждая переменная, которую он устанавливает, имеет локальную область видимости
, и когда она возвращается в свою родительскую оболочку, эти значения исчезают.
Но когда _more_important_function ()
устанавливает $ ACTION
, это глобальная область
, поэтому она влияет на _less_important_function ()
вторую оценку $ ACTION
, потому что _less_important_function ()
устанавливает $ ACTION
только через $ {параметр: = extension}.