我正在尝试模仿 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/