あいまいなリダイレクトが完了 >$2

あいまいなリダイレクトが完了 >$2

Bashスクリプトを完了しましたが、まだ2つのエラーが発生します。関連質問も検索しましたが、成功しませんでした。

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

リダイレクトエラー

問題は、参照に使用する変数が空であるため、読み取るファイルが存在しないことです。

$22番目のパラメータを表しますが、パラメータ./script.shはまったくありません。あなたは次のようなものが必要です./script.sh file1 file2

エラーがある場合

ライン

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

間違った。私が正しく理解したら、avem_element2つの引数を使って関数を呼び出し、終了コードを比較したいと思います。ただし、[ ]文字列のみが比較されます。if終了コード(通常は1 [ ])を確認してください。[ ]まったくそうする必要はありません。これを行う:

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

関連情報