스크립트에 대해 다음 테스트가 작성되었습니다.
grep
불만사항을 접수하기 위해 다음과 같은 방법으로 전화를 겁니다 .
test --FS="," --incl=.texi,.org -C 8 --dyn="package" ./01cuneus
grep: : No such file or directory
fdir
문제의 원인일 수 있는 빈 요소가 포함되어 있음 을 발견했습니다 .
test ()
{
local fs="" fdir=() incl=()
local dyn=0 ctx=0 fdir=""
local isufx=() ictx=()
shrtopts="C:"
longopts="FS:,incl:,dyn:,dynamic:,context:"
opts=$(getopt -o "$shrtopts" -l "$longopts" -n "${0##*/}" -- "$@")
eval "set -- ${opts}"
while (( $# > 0 )); do
case "$1" in
# ----------------------------------------------
("--FS")
fs="$2" ; shift 2 ;;
("--incl")
incl+=("$2") ; shift 2 ;;
# ----------------------------------------------
("--dyn"|"--dynamic")
dyn=1 ; ptrn="$2" ; shift 2 ;;
("-C"|"--context")
ctx=$2 ; shift 2 ;;
# ----------------------------------------------
("--")
shift ; break ;;
# ----------------------------------------------
esac
done
if (( $# >= 1 )); then
declare -A tag # declare Associative Array
for dpa in "$@"; do
[[ ! -d $dpa ]] && continue # skip to next iteration
[[ ${tag[din:$dpa]} ]] && continue
fdir+=("$dpa")
tag[din:$dpa]=1
done
fi
[[ ! -z "$ctx" ]] && ctx=8
ictx=( -C "$ctx" )
(( ${#incl[@]} == 0 )) && incl=( .texi .org )
if (( ${#incl[@]} > 0 )); then
for ext in "${incl[@]}"; do
s="$ext"
[[ (! -z "$fs") && ("$ext" == *"$fs"*) ]] && s=${ext//"$fs"/" "}
for fltyp in $s; do
isufx+=( --include="*$fltyp" )
done
done
fi
grep -rl "${isufx[@]}" "$ptrn" "${fdir[@]}" |
while read f; do
echo -e $(tput setaf 46)"==> $f <==\n"$(tput sgr0)
grep -ni "${ictx[@]}" "$ptrn" "$f"
echo ""
done
}
답변1
귀하의 기능에는 test
처음에 두 줄이 있습니다
local fs="" fdir=() incl=()
local dyn=0 ctx=0 fdir=""
빈 문자열이 fdir
변수에 어떻게 할당되는지 확인하세요.
나중에 당신은추가의데이터를 fdir
배열로 사용합니다. 이렇게 하면 배열 시작 부분에 빈 요소가 남게 되어 fdir
설명하는 문제가 발생합니다.
fdir
빈 문자열로 초기화하지 마십시오 .