Как искать слово в массиве

Вы не должны ничего добавить к /etc/sudoers.d/! Это просто лишний и опасный (как видите). Все пользователи admin (включая учетную запись пользователя по умолчанию, которая создается во время установки) уже разрешено использовать sudo для запуска команд с привилегиями root.

Еще раз удалите файл /etc/sudoers.d/ken и верните все изменения, которые вы возможно,

pkexec rm /etc/sudoers.d/ken
. Вы можете использовать pkexec как временную замену для sudo, чтобы исправить проблемы, пока это не работает:

pkexec rm /etc/sudoers.d/ken

Пользователи Admin на Ubuntu определяются своим членством в группе sudo (ранее admin).

Когда вы добавляете новых пользователей admin через GUI Unity Control Center, это будет позаботьтесь об этом членстве в группах автоматически.

Когда вы добавляете нового пользователя из терминала с помощью sudo adduser USERNAME, он не будет членом какой-либо дополнительной группы. В этом случае вам нужно добавить эти две группы вручную, чтобы сделать учетной записи администратором, которому разрешено использовать sudo:

sudo adduser USERNAME sudo

И в редком случае, когда вам действительно нужно будет отредактировать /etc/sudoers или файл в /etc/sudoers.d/, никогда не делайте этого вручную, но ** всегда используйте sudo visudo для его редактирования! Эта команда проверяет файлы и проверяет наличие ошибок, прежде чем применять изменения и не даст вам разобраться с командой sudo.

1
задан 12 December 2017 в 18:07

6 ответов

С bash:

array=("a b" "c d") for ((i=0; i<${#array[@]}; i++)); do if [[ ${array[$i]} == "a b" ]]; then echo "Element $i matched" fi done

Выход:

Element 0 matched

${#array[@]} содержит номер последнего элемента в массиве.

1
ответ дан 18 July 2018 в 01:20

Когда вы печатаете элементы массива каждый в новой строке, вы можете использовать grep:

printf '%s\n' "${array[@]}" | grep "a b"

Если элементы массива содержат \n, лучше использовать \0 и grep -z ( спасибо @muru):

printf '%s\0' "${array[@]}" | grep -z "a b"
2
ответ дан 18 July 2018 в 01:20

Этот SO Q & amp; A предлагает способ выполнить поиск

Реализация для вашего вопроса:

#!/bin/bash array=("a b" "c d") value="a b" if [[ " ${array[@]} " =~ " ${value} " ]]; then echo found $value fi

Выход:

found a b
0
ответ дан 18 July 2018 в 01:20

С bash:

array=("a b" "c d") for ((i=0; i<${#array[@]}; i++)); do if [[ ${array[$i]} == "a b" ]]; then echo "Element $i matched" fi done

Выход:

Element 0 matched

${#array[@]} содержит номер последнего элемента в массиве.

1
ответ дан 24 July 2018 в 17:22
  • 1
    Вы также можете сделать for i in "${!array[@]}", чтобы напрямую получить индексы массива, которые без проблем справятся с отсутствующими индексами и ассоциативными массивами. – muru 13 December 2017 в 09:17
  • 2
    @muru: Спасибо за полезный намек. – Cyrus 13 December 2017 в 09:19

Когда вы печатаете элементы массива каждый в новой строке, вы можете использовать grep:

printf '%s\n' "${array[@]}" | grep "a b"

Если элементы массива содержат \n, лучше использовать \0 и grep -z ( спасибо @muru):

printf '%s\0' "${array[@]}" | grep -z "a b"
2
ответ дан 24 July 2018 в 17:22

Этот SO Q & amp; A предлагает способ выполнить поиск

Реализация для вашего вопроса:

#!/bin/bash array=("a b" "c d") value="a b" if [[ " ${array[@]} " =~ " ${value} " ]]; then echo found $value fi

Выход:

found a b
0
ответ дан 24 July 2018 в 17:22
  • 1
    ОК, но обратите внимание на комментарий ниже ответа SO & quot; Не хорошая стратегия, если ваши поля содержат пробелы. & Quot; - например, это будет & quot; match & quot; если array=("a a" "b b") я думаю? – steeldriver 12 December 2017 в 18:06

Другие вопросы по тегам:

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