Redirecionamento ambíguo feito $ 2

0

Eu terminei o meu script mas ainda estou recebendo dois erros. Eu também procurei por problemas relacionados, mas nenhum funcionou:

#!/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

Estes são os erros:

./script.sh: line 16: $2: ambiguous redirect

./script.sh: line 32: $2: ambiguous redirect

Por que estou recebendo esse erro de redirecionamento e como posso corrigi-lo?

    
por яүυк 05.02.2015 / 00:16

1 resposta

1

erro de redirecionamento

O problema é que o arquivo que você tenta ler não existe porque a variável que você usa para se referir ao arquivo está vazia.

$2 significa o segundo parâmetro, mas em ./script.sh não há nenhum parâmetro. Você precisa de algo como ./script.sh file1 file2

se o erro

A linha

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

está errado. Se eu entendi corretamente, então você quer chamar a função avem_element com dois parâmetros e comparar o código de saída. Mas [ ] compara apenas cadeias. if verifica um código de saída (geralmente o de [ ] ). Você não precisa de [ ] . Apenas faça isso:

if avem_element "$sir1[i]" "${sir[@]}"; then
    
por 05.02.2015 / 00:52