小编Lou*_*Lou的帖子

Bash 补全在单词后附加一个空格 - 我怎样才能阻止这个?

我正在为 Bash 编写一个制表符补全脚本,使用 Python 来提供补全结果。我正在使用虚拟脚本来显示我遇到的问题,内容并不重要。

我有一个名为 的 Bash 脚本dothat,其中包含以下代码:

var=$1
echo "You have chosen $var"
Run Code Online (Sandbox Code Playgroud)

我还有一个为 创建制表符完成的脚本dothat,称为dothat-completion.bash

_comp_func()
{
    COMPREPLY=()

    # Gets the output of a Python file and puts it into a variable
    fruits=$(python fruit.py)

    COMPREPLY=($(compgen -W "${fruits[*]}" -- $cur)) 
}

complete -F _comp_func dothat
Run Code Online (Sandbox Code Playgroud)

以及(简单)内容fruit.py

print('fruit:', end='')
Run Code Online (Sandbox Code Playgroud)

Python 脚本只是将字符串打印到 STDOUT,然后由 Bash 补全函数捕获该字符串,并用于生成制表符补全的可能匹配项。

现在,我想用这个脚本做的是,当我输入 时dothat <TAB>,它将完成到dothat fruit:,末尾没有空格。问题是,当我键入dothat 并按 Tab 时,它会完成为dothat fruit: ,并带有不需要的尾随空格。

我尝试将Python的内容更改为以下内容,并且所有结果都相同:

print('"fruit:"', end='') …
Run Code Online (Sandbox Code Playgroud)

bash python autocomplete shell-script

5
推荐指数
1
解决办法
1584
查看次数

如果有什么区别![[ foo ]] 并且如果 [[ ! foo ]] 在 Bash 中?

我知道这!用于否定 Bash 中的 if 条件,但我刚刚看到采用以下格式的代码:

if ! [[ CONDITION ]]; then
    SOMETHING
fi
Run Code Online (Sandbox Code Playgroud)

这种格式和下面的格式有区别吗?

if [[ ! CONDITION ]]; then
    SOMETHING
fi
Run Code Online (Sandbox Code Playgroud)

我试过谷歌,但还没有找到任何关于以前的语法。

bash shell-script syntax

1
推荐指数
1
解决办法
149
查看次数

如果 Bash 数组不能包含空字符串,这个数组是如何做到的?

我最近发现不能将空字符串传递给 Bash 数组。这很棘手,因为我试图将空字符串值插入到数组中。

然而,我注意到 Bash 完成变量 COMP_WORDS 可以包含空值。

我编写了一个虚拟完成脚本来说明这一点,并启用了调试选项:

  1 #!/bin/bash
  2 _comp() {
  3     set -xv
  4     for i in ${!COMP_WORDS[@]}; do
  5         echo "<${COMP_WORDS[$i]}>"                                                                                         
  6     done
  7     set +xv
  8     local cur=${COMP_WORDS[$COMP_CWORD]}
  9 
 10     local arr=(apple banana mango pineapple)
 11     COMPREPLY=()
 12     COMPREPLY=($(compgen -W "${arr[*]}" -- $cur))
 13 
 14 }
 15 
 16 complete -F _comp dummy
Run Code Online (Sandbox Code Playgroud)

如果我获取该文件,然后输入以下内容:

dummy apple   banana
Run Code Online (Sandbox Code Playgroud)

然后,如果我将光标移回苹果和香蕉之间的中间空间(下面用下划线表示)...

dummy apple _ banana
Run Code Online (Sandbox Code Playgroud)

然后,如果我点击选项卡,我会从生成的调试中得到以下输出,显示四个数组元素,“虚拟”“苹果”“香蕉”

for i in '${!COMP_WORDS[@]}'
+ echo '<dummy>'
<dummy>
+ for …
Run Code Online (Sandbox Code Playgroud)

bash array autocomplete shell-script null

1
推荐指数
1
解决办法
4505
查看次数

标签 统计

bash ×3

shell-script ×3

autocomplete ×2

array ×1

null ×1

python ×1

syntax ×1