Расширяя ответ @ridiculous _fish, со следующей функцией для bash она также работает для массивов, содержащих пробелы, например $PATH
, если в ваших путях есть пробелы. Однако в настоящее время setenv
уже определена как функция в стандартной библиотеке рыбы, поэтому я изменил имя здесь наshenv
function shenv {
var="$1"
shift
export "$var=$(printf "%s\n" "$@" | paste -s -d: -)"
}
. ~/.env
Теперь в файле .env
можно указывать компоненты массива как отдельные аргументы команды setenv
:
shenv PATH /my/path /my/path\ with\ spaces "/my/quoted path" $PATH
Для рыбы @ridiculous _подойдет простая реализация рыбы:
function shenv; set -gx $argv; end
source ~/.env
Q:" Поиск конкретного префикса производителя в каждом интерфейсе. "
A :Префикс производителя представляет собой первые три октета. Например
vendor_mac_prefix:
HP: '00:22:64'
Intel: '00:23:B2'
Qualcom: '00:A0:C6'
mac_prefix: "{{ vendor_mac_prefix.values()|list }}"
Учитывая список MAC-адресов, например.
mac_addresses:
- 00:22:64:12:34:5A
- 00:22:64:12:34:5B
- 00:23:B2:12:34:5A
- 00:23:B2:12:34:5B
- 00:A0:C6:12:34:5A
- 00:A0:C6:12:34:5B
- FF:FF:FF:FF:FF:FA
- FF:FF:FF:FF:FF:FB
задача
- debug:
msg: "{{ item }} is the correct NIC"
loop: "{{ mac_addresses }}"
when: item[0:8] in mac_prefix
дает
ok: [localhost] => (item=00:22:64:12:34:5A) =>
msg: 00:22:64:12:34:5A is the correct NIC
ok: [localhost] => (item=00:22:64:12:34:5B) =>
msg: 00:22:64:12:34:5B is the correct NIC
ok: [localhost] => (item=00:23:B2:12:34:5A) =>
msg: 00:23:B2:12:34:5A is the correct NIC
ok: [localhost] => (item=00:23:B2:12:34:5B) =>
msg: 00:23:B2:12:34:5B is the correct NIC
ok: [localhost] => (item=00:A0:C6:12:34:5A) =>
msg: 00:A0:C6:12:34:5A is the correct NIC
ok: [localhost] => (item=00:A0:C6:12:34:5B) =>
msg: 00:A0:C6:12:34:5B is the correct NIC
skipping: [localhost] => (item=FF:FF:FF:FF:FF:FA)
skipping: [localhost] => (item=FF:FF:FF:FF:FF:FB)
Следующий вариант — создать регулярное выражение путем объединения элементов в списке. Например, приведенная ниже задача дает те же результаты
- debug:
msg: "{{ item }} is the correct NIC"
loop: "{{ mac_addresses }}"
when: item is search(mac_prefix|join('|'))