gpt4 book ai didi

bash - bash 脚本中的自动完成文件名

转载 作者:行者123 更新时间:2023-11-29 09:32:03 26 4
gpt4 key购买 nike

我正在尝试模仿 bash 文件补全。
假设我有以下文件:

test1
测试2

输入字符串“te”我想得到输出“test

这是我目前的尝试($c 是输入字符串):

l=1
q="$c"
for j in $(ls -A | grep "^$c"); do
if [ "${j/$c}" != "$j" ]; then
n=$(ls -A | grep ^$j | wc -l)
if [ $n -gt $l ]; then
q="$j"
fi
fi
done
c="$q"
echo $c

感谢您的帮助

最佳答案

我倾向于认为没有办法从完成引擎中获取它,因为它不是 GNU Bash 的一部分,而是 Readline。但至少我们可以使用 compgen 获得可能完成的列表。并且找到最长公共(public)前缀的实现应该不是问题。所以……

#!/bin/bash

SCRIPTNAME="${0##*/}"
USAGE="Usage: $SCRIPTNAME <prefix>

Print common prefix of possible file name completions. Like <TAB> but to
stdout."

(( $# == 1 )) || { printf >&2 '%s\n' "$USAGE"; exit 1; }

PREFIX="$1"

commonprefix() {
(( $# >= 2 )) || {
echo "$1"
return 0
}
local -i i N M
for ((i=0; i<=${#1}; i++)); do
for ((N=1; N<=$#-1; N++)); do
let M=$N+1
[[ ${!N:i:1} == ${!M:i:1} ]] || break 2
done
done
echo "${1:0:i}"
}

readarray -t COMPLETIONS < <(compgen -f "$PREFIX")
commonprefix "${COMPLETIONS[@]}"

关于bash - bash 脚本中的自动完成文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20827951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com