Найти дубликаты параметров в командной строке на bash - PullRequest
0 голосов
/ 01 ноября 2019

Я ищу способ узнать, есть ли у параметра командной строки дубликат или нет в bash.

Другими словами, когда я делаю ./imp.sh matches matches matches target, моя программа должна отправить ошибку, потому что совпадения были повторены три раза. (./imp.sh - название программы).

Я могу найти правильное количество параметров, но не могу видеть погоду, каждый параметр уникален.

Для просмотра правильного количества параметров я делаю:

if [ "$#" -ne 4 ]; then
 echo "Incorrect number of parameters"
 exit 1
fi

1 Ответ

0 голосов
/ 01 ноября 2019

Если вы ожидаете ровно трех уникальных параметров, достаточно просто проверить исчерпывающие возможности:

if [ $# -ne 4 ]; then
    ...
elif [ "$1" = "$2" ] || [ "$1" = "$3" ] || [ "$2" = "$3" ]; then
    echo "First three arguments must be unique"
    exit 1
fi

Если имеется произвольное количество элементов, используйте ключиАссоциативный массив как набор.

declare -A unique

for arg in "${@:1:$#-1}"; do
    if [[ -v unique[$arg] ]]; then
        echo "Duplicate arg $arg"
        exit 1
    fi
    unique[$arg]=  # The value doesn't matter; the empty string is as good as any
done
...