# 1111 - неверное использование групповой функции & hellip; но так ли это?

В этот момент проверьте значение COMP_LINE:

$ asd one 

Вы заметите, что это значение:

declare -x COMP_LINE="asd one "

. Это приведет к двум позиционным параметрам после того, как вы выдадите set, и ваше состояние не будет вызвано. Попробуйте ввести дополнительный символ: $ asd one o, и вы увидите, что ваше условие будет запущено правильно, и ничего не будет завершено.


Большинство завершений, которые я видел, были выполнены с использованием функции. Фактически, проверка всех завершений, определенных в моей системе сейчас (большинство из них по умолчанию), ни один из них не выполняется с использованием сценария.

Использование функции имеет некоторые преимущества, например массив COMP_WORDS, который учитывает кавычки. Ваш скрипт можно было бы переписать примерно так:

_asd_comp() {
    (( COMP_CWORD > 1 )) && return
    local cur=${COMP_WORDS[COMP_CWORD]} IFS=$' \t\n'
    COMPREPLY=( $(compgen -W "one two three" -- "$cur") )    
}

complete -o bashdefault -o default -F _asd_comp asd

Я добавил параметры -o, чтобы по умолчанию выполнялись после первого аргумента. Вы можете узнать больше об этом в руководстве .


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

(( $# > 1 )) && [[ ${COMP_LINE: -1} = " " ]] && return

-2
задан C-Sway 19 January 2019 в 13:26
поделиться

1 ответ

В результате вашего «непристойного количества скобок» вы в итоге получили недействительный

Sum(...count(...)...)

, который будет агрегацией агрегации, в то время как вы, вероятно, ищете для чего-то вроде

Sum(...)/count(...)

Не имеющего непосредственного отношения к вашей текущей проблеме, но, кроме того, если s.home не является вашим первичным ключом, вы можете либо получить неверные результаты, либо сообщение об ошибке , поскольку s.kickoff и s.away не являются частью вашего group by. И, как уже упоминалось в @Strawberry, вам следует серьезно подумать о редизайне ITACornerNew.

0
ответ дан Solarflare 19 January 2019 в 13:26
поделиться
Другие вопросы по тегам:

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