Помощь по простому скрипту
#!/bin/bash
array1=(
prova1
prova2
slack64
)
a="slack64"
b="ab"
if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi
Этот скрипт просто не работает, я хочу скрипт, который проверяет, присутствует ли slack64 в списке (я использую массив), и просто даю мне, да или нет. Я не знаю, как сравнить массив с одной переменной.
array1
работает?Ответы:
Используйте другой тип массива: вместо целочисленного массива используйте ассоциативный массив, поэтому ключ (индекс) - это то, что вы будете проверять.
bash-4.0
или позже требуется для этого.Выше мы не заботимся о значениях, для этого они должны быть непустыми. Вы можете «инвертировать» индексированный массив в новый ассоциативный массив, заменив ключ и значение:
Это может окупиться, если у вас есть большие массивы, которые часто ищут, поскольку реализация ассоциативных массивов будет работать лучше, чем циклы обхода массива. Тем не менее, он не подходит для каждого варианта использования, поскольку не может обрабатывать дубликаты (хотя вы можете использовать значение в качестве счетчика вместо 1, как указано выше) и не может обрабатывать пустой индекс.
Разбивая сложную линию выше, объясните «инверсию»:
источник
Простой способ состоит в том, чтобы перебрать цикл:
источник
[[ a == aaa ]]
ложь, но совпадение ааа нет?[ ]
: класс символов (globs)[[ ]]
за то, что вы сказали. Вы проверяли?С
zsh
:источник
Эта функция работает с ассоциативными массивами.
Мы можем использовать эту функцию для выполнения одного из следующих действий:
- проверить, есть ли в массиве определенный ключ -----------------> inArray "myKey" $ {! myArray [@]} "
- проверить, содержит ли массив определенное значение ---------> inArray "myValue" "$ {myArray [@]}"
источник
Вы также можете использовать grep для этого:
источник
$a
, и не начинайте с того,-
что вы забыли--
). Вы можете использовать%s\0
вместо%s\n
и использоватьgrep --null
(предполагая GNU grep или совместимый), поскольку переменные bash в любом случае не могут содержать символ NUL. Вам также нужно было бы обработать случай пустого массива специально (так как эта команда printf выдаст то же самое, что и для массива с одним пустым элементом). Также обратите внимание, что вам не нужно запускать подоболочку здесь.