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