grep이 `grep: : 해당 파일이나 디렉토리가 없습니다`라고 불평합니다.

grep이 `grep: : 해당 파일이나 디렉토리가 없습니다`라고 불평합니다.

스크립트에 대해 다음 테스트가 작성되었습니다.

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빈 문자열로 초기화하지 마십시오 .

관련 정보