使用空格完成bash选项卡
发布时间:2020-12-15 22:43:03 所属栏目:安全 来源:网络整理
导读:当可能的选项可能包含空格时,我遇到了bash-completion的问题. 假设我想要一个与第一个参数相呼应的函数: function test1() { echo $1} 我生成一个可能的完成选项列表(一些有空格,一些没有),但我无法正确处理空格. function pink() { # my real-world exampl
当可能的选项可能包含空格时,我遇到了bash-completion的问题.
假设我想要一个与第一个参数相呼应的函数: function test1() { echo $1 } 我生成一个可能的完成选项列表(一些有空格,一些没有),但我无法正确处理空格. function pink() { # my real-world example generates a similar string using awk and other commands echo "nick mason syd-barrett david_gilmour roger waters richard wright" } function _test() { cur=${COMP_WORDS[COMP_CWORD]} use=`pink` COMPREPLY=( $( compgen -W "$use" -- $cur ) ) } complete -o filenames -F _test test 当我尝试这个时,我得到: $test <tab><tab> david_gilmour nick roger waters mason richard syd-barrett wright $test r<tab><tab> richard roger waters wright 这显然不是我的意思. 如果我没有为COMPREPLY分配一个数组,即只有$(compgen -W“$use” – $cur),如果只剩下一个选项,我就可以使用它: $test n<tab> $test nick mason <cursor> 但如果仍有几个选项,它们都用单引号打印: $test r<tab><tab> $test 'roger waters richard wright' <cursor> 我的COMPREPLY变量肯定有问题,但我无法弄清楚是什么…… (在solaris上运行bash,以防万一…) 解决方法
如果需要处理字符串中的数据,可以使用Bash的内置字符串替换运算符.
function _test() { local iter use cur cur=${COMP_WORDS[COMP_CWORD]} use="nick mason syd-barrett david_gilmour roger waters richard wright" # swap out escaped spaces temporarily use="${use// /___}" # split on all spaces for iter in $use; do # only reply with completions if [[ $iter =~ ^$cur ]]; then # swap back our escaped spaces COMPREPLY+=( "${iter//___/ }" ) fi done } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |