Не удается выполнить сопряжение/подключение к наушникам :Сбой :Ошибка инициализации модуля

зш

поменять местами ключи <=> значения

В zsh, где основным синтаксисом для определения хэша является hash=(k1 v1 k2 v2...), как и в perl(, более новые версии также поддерживают неудобный синтаксис ksh93/bash для совместимости, хотя и с вариациями, когда дело доходит до цитирования ключей)

keys=("${(@k)hash}")
values=("${(@v)hash}")

typeset -A reversed
reversed=("${(@)values:^keys}") # array zipping operator

или с помощью петли:

for k v ("${(@kv}hash}") reversed[$v]=$k

@и двойные кавычки предназначены для сохранения пустых ключей и значений (обратите внимание, что bashассоциативные массивы не поддерживают пустые ключи ). Поскольку расширение элементов в ассоциативных массивах не имеет определенного порядка, если несколько элементов $hashимеют одно и то же значение (, которое в конечном итоге станет ключом в $reversed), вы не можете сказать, какой ключ будет использоваться. как значение в $reversed.

для вашей петли

Вы должны использовать флаг нижнего индекса хэша Rдля получения элементов на основе значения вместо ключа, в сочетании с eдля точного соответствия (в отличие от подстановочного знака ), а затем получить ключи для этих элементов. элементы с флагом раскрытия параметра k:

for value ("${(@u)hash}")
  print -r "elements with '$value' as value: ${(@k)hash[(Re)$value]}"

ваш perl-подход

zsh(в отличие отksh93)не поддерживает массивы массивов, но его переменные могут содержать байт NUL, поэтому вы можете использовать это для разделения элементов, если элементы иначе не содержат байты NUL, или использовать ${(q)var}/ ${(Q)${(z)var}}для кодирования/декодирования списка с использованием кавычек.

typeset -A seen
for k v ("${(@kv)hash}")
  seen[$v]+=" ${(q)k}"

for k v ("${(@kv)seen}")
  print -r "elements with '$k' as value: ${(Q@)${(z)v}}"

кш93

ksh93 была первой оболочкой, которая ввела ассоциативные массивы в 1993 году. Синтаксис присваивания значений в целом означает, что это очень сложно сделать программно, в отличие от zsh, но, по крайней мере, в ksh93 это несколько оправдано тем, что ksh93поддерживает сложные вложенные структуры данных.

В частности, здесь ksh93 поддерживает массивы как значения для хеш-элементов, так что вы можете сделать:

typeset -A seen
for k in "${!hash[@]}"; do
  seen[${hash[$k]}]+=("$k")
done

for k in "${!seen[@]}"; do
  print -r "elements with '$k' as value ${x[$k][@]}"
done

баш

bashдесятилетия спустя добавили поддержку ассоциативных массивов, скопировали синтаксис ksh93, но не другие расширенные структуры данных,и не имеет каких-либо расширенных операторов расширения параметров zsh.

В bashвы можете использовать цитируемый список , упомянутый в zsh, используя printf %qили с более новыми версиями ${var@Q}.

typeset -A seen
for k in "${!hash[@]}"; do
  printf -v quoted_k %q "$k"
  seen[${hash[$k]}]+=" $quoted_k"
done

for k in "${!seen[@]}"; do
  eval "elements=(${seen[$k]})"
  echo -E "elements with '$k' as value: ${elements[@]}"
done

Однако, как отмечалось ранее, ассоциативные массивы bashне поддерживают пустое значение в качестве ключа, поэтому он не будет работать, если некоторые из значений $hashпусты. Вы можете заменить пустую строку каким-нибудь заполнителем, например <EMPTY>, или префиксом ключа с каким-нибудь символом, который вы позже удалите для отображения.

0
08.07.2020, 18:32
1 ответ

Я решил свой pb. путем обновления пакета pulseaudio-module-bluetoothиз Launchpad ppa :tigerite/bluez5 PPA:

$ wget -nv https://launchpad.net/~tigerite/+archive/ubuntu/bluez5/+files/pulseaudio-module-bluetooth_6.0-0ubuntu6ppa4_amd64.deb
2020-08-30 00:23:20 URL:https://launchpad.net/~tigerite/+archive/ubuntu/bluez5/+files/pulseaudio-module-bluetooth_6.0-0ubuntu6ppa4_amd64.deb [112370/112370] -> "pulseaudio-module-bluetooth_6.0-0ubuntu6ppa4_amd64.deb" [1]
$ sudo gdebi -n pulseaudio-module-bluetooth_6.0-0ubuntu6ppa4_amd64.deb
Reading package lists... Done
Building dependency tree        
Reading state information... Done
Building data structures... Done 
Building data structures... Done 
(Reading database... 588813 files and directories currently installed.)
Preparing to unpack pulseaudio-module-bluetooth_6.0-0ubuntu6ppa4_amd64.deb...
Unpacking pulseaudio-module-bluetooth (1:6.0-0ubuntu6ppa4) over (1:4.0-0ubuntu11)...
Setting up pulseaudio-module-bluetooth (1:6.0-0ubuntu6ppa4)...
$ pactl load-module module-bluetooth-discover
39
$ pactl list modules short | grep module-bluetooth
38  module-bluetooth-policy     
39  module-bluetooth-discover

И теперь работает нормально:

$ bluetoothctl 
[NEW] Controller 34:E6:AD:A1:9B:8A seb-C70D-B-311 [default]
[NEW] Device 00:13:09:01:19:61 M-260 BT
[bluetooth]# connect 00:13:09:01:19:61 
Attempting to connect to 00:13:09:01:19:61
[CHG] Device 00:13:09:01:19:61 Connected: yes
Connection successful
[M-260 BT]# 
0
18.03.2021, 23:23

Теги

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