Conzsh
:
VAR1=tom:rich,LIAm:viki
VAR2=liam,albert,tom
typeset -A map
for i ("${(@s(,))VAR1}") map[${(L)i%%:*}]=${i#*:}
out=()
for i ("${(@s(,))VAR2}") out+=${(qq)${map[${(L)i}]:-$i}}
VAR3=${(j(,))out}
printf '%s\n' "$VAR3"
Salida:
'viki','albert','rich'
Lo mismo conawk
(que podría usar con zsh
, o cualquier Bourne -como shell comobash
):
VAR1=tom:rich,LIAm:viki
VAR2=liam,albert,tom
export VAR1 VAR2
awk -v q=\' 'BEGIN {
n = split(ENVIRON["VAR1"], a, ",")
for (i = 1; i <= n; i++) {
k = v = a[i]
sub(/:.*/, "", k)
sub(/[^:]*:/, "", v)
map[tolower(k)] = v
}
n = split(ENVIRON["VAR2"], a, ",")
for (i = 1; i <= n; i++) {
k = tolower(a[i])
out = out sep q (k in map ? map[k] : a[i]) q
sep = ","
}
print out
}'
(una diferencia es que aquí solo encerramos los valores entre comillas simples. Si el valor contiene comillas simples, como foo'bar
, obtienes 'foo'bar'
mientras que zsh
's ${(qq)var}
te daría'foo'\''bar'
).
La versión zsh
permite cualquier valor para los elementos. Pueden contener cualquier valor de byte, incluidos nueva línea y NUL o un valor vacío. El awk
no admitirá NUL, ya que no se pueden almacenar en variables de entorno y, según la implementación, puede ahogarse con elementos que contienen bytes que no forman caracteres válidos.
Tenga en cuenta que con ambos,VAR2=
se entiende como una lista vacía mientras que VAR2=,
se entiende como una lista de 2 elementos vacíos, no hay forma de expresar una lista de un elemento vacío.
Вероятно, вам нужны правила udev, чтобы включить их. Что-то похожее на здесь:https://github.com/LairdCP/UwTerminalX/wiki/Granting-non-root-USB-device-access-(Linux)
Обновление:
Попробуйте сделать следующий файл:/etc/udev/rules.d/99-permissions.rules
и внутри добавить следующее:
SUBSYSTEM=="usb",GROUP="users",MODE="0666"
Затем запустите:
$ udevadm control --reload-rules && udevadm trigger
и перезагрузите Linux. Это из Ubuntu 16.04, я предполагаю, что путь тот же, что и в Debian Buster. Это работало в конфигурации, где мне приходилось использовать некоторое оборудование принтера/сканера.