모호한 리디렉션 완료 >$2

모호한 리디렉션 완료 >$2

Bash 스크립트를 완료했지만 여전히 두 가지 오류가 발생합니다. 관련 질문도 검색했지만 성공하지 못했습니다.

#!/bin/bash

avem_element () {
  local e
  for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
  return 1
}

i=0
i1=0
# cel de al doilea fisier este dat ca si cel de al doilea argument
while read linie
do
    sir[i++]="$linie"
    echo "L-am citit pe  $linie"
done < $2
# acum procesam primul fisier
i=0
spatiu=" "
virgula=", "
while read linie
do
    sir1[i++]="$linie"
    echo "Am citit  $linie"
    # verificam daca elementul citit este un nume
    if [ avem_element "$sir1[i]" "${sir[@]}" -eq 0 ];then
       sir2[i1++]=$linie$spatiu
    else 
       sir2[i1]=$sir2[i1]$linie
       sir2[i1]=$sir2[i1]$virgula
    fi
done < $2

오류는 다음과 같습니다.

./script.sh: 16행: $2: 모호한 리디렉션

./script.sh: 32행: $2: 모호한 리디렉션

이 리디렉션 오류가 발생하는 이유와 해결 방법은 무엇입니까?

답변1

리디렉션 오류

문제는 참조하는 데 사용하는 변수가 비어 있기 때문에 읽으려는 파일이 존재하지 않는다는 것입니다.

$2두 번째 매개변수를 나타내지만 ./script.sh매개변수가 전혀 없습니다. 당신은 다음과 같은 것이 필요합니다./script.sh file1 file2

오류가 있는 경우

if [ avem_element "$sir1[i]" "${sir[@]}" -eq 0 ];then

틀렸다. 내가 올바르게 이해했다면 avem_element두 개의 인수를 사용하여 함수를 호출하고 종료 코드를 비교하고 싶을 것입니다 . 그러나 [ ]문자열만 비교됩니다. if종료 코드(일반적으로 1 [ ])를 확인하세요. [ ]전혀 그럴 필요가 없습니다 . 이렇게 하세요:

if avem_element "$sir1[i]" "${sir[@]}"; then

관련 정보