Другой способ, используя только IFS:
#!/bin/bash
declare -A myArr
IFS='&=' read -a post
for ((i = 0; i < ${#post[@]}; i += 2))
do
myArr[${post[i]}]=${post[i + 1]}
done
for key in "${!myArr[@]}"
do
printf "%s: %s\n" "$key" "${myArr[$key]}"
done
read, разбивает входящую строку на слова по всем символам в IFS, поэтому вы можете использовать как &, так и [ f10] в IFS, чтобы разделить на оба. Учитывая, что вход POST всегда имеет значение для ключа, это будет работать.
Однако этот метод не может проверить, существует ли строгое чередование между & и =. Итак, например, age&myAge=name=myName будет проанализирован так, что age=myAge и name=myName.
У вас есть скопировал IFS и восстановил его. Но вам нужно только IFS для read, поэтому примените IFS только для READ:
IFS='...' read ... # or
while IFS='...' read ...; ...
Восстановление IFS затруднительно, так как unset IFS и пустой [ f25] влияют на оболочку по-разному, но одинаковы, когда вы принимаете значение самого IFS. То есть:
IFS=
IFS_BAK="$IFS"
даст такое же значение для IFS_BAK как:
unset IFS
IFS_BAK="$IFS"
Пустое IFS - это то, что: пустая строка. Тем не менее, все IFS заставляют оболочку вести себя так, как если бы использовалось значение по умолчанию IFS (пробел, табуляция, новая строка):
$ foo='a b c'
$ printf "|%s|\n" $foo
|a|
|b|
|c|
$ IFS=; printf "|%s|\n" $foo
|a b c|
$ unset IFS; printf "|%s|\n" $foo
|a|
|b|
|c|
Итак, если бы вы обнаружил себя с неуспешным IFS, а затем попробовал старый трюк с резервным копированием и восстановлением IFS, вы можете получить неожиданные результаты. Лучше ограничивать изменения в IFS только теми командами, которые в этом нуждаются.
Чтобы добавить пользовательские DNS-серверы, используйте
nmcli connection modify Wired_connection_1 ipv4.dns "192.168.1.1,8.8.8.8,8.8.4.4"
, чтобы проверить, поддерживает ли конфигурация
nmcli connection show Wired_connection_1 | grep "dns"
ipv4.dns: 192.168.1.1,8.8.8.8,8.8.4.4
ipv4.dns-search: --
ipv4.dns-options: (default)
ipv4.dns-priority: 0
ipv4.ignore-auto-dns: no
ipv6.dns: --
ipv6.dns-search: --
ipv6.dns-options: (default)
ipv6.dns-priority: 0
ipv6.ignore-auto-dns: no
. Я наткнулся на ту же проблему, если я удалю 192.168.1.1, затем из-за некоторого внутреннего сетевого моста vmware он не работал, но для установки дополнительного DNS-сервера вы можете использовать вышеуказанный метод.
Чтобы добавить пользовательские DNS-серверы, используйте
nmcli connection modify Wired_connection_1 ipv4.dns "192.168.1.1,8.8.8.8,8.8.4.4"
, чтобы проверить, поддерживает ли конфигурация
nmcli connection show Wired_connection_1 | grep "dns"
ipv4.dns: 192.168.1.1,8.8.8.8,8.8.4.4
ipv4.dns-search: --
ipv4.dns-options: (default)
ipv4.dns-priority: 0
ipv4.ignore-auto-dns: no
ipv6.dns: --
ipv6.dns-search: --
ipv6.dns-options: (default)
ipv6.dns-priority: 0
ipv6.ignore-auto-dns: no
. Я наткнулся на ту же проблему, если я удалю 192.168.1.1, затем из-за некоторого внутреннего сетевого моста vmware он не работал, но для установки дополнительного DNS-сервера вы можете использовать вышеуказанный метод.