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
リダイレクトエラー
問題は、参照に使用する変数が空であるため、読み取るファイルが存在しないことです。
$2
2番目のパラメータを表しますが、パラメータ./script.sh
はまったくありません。あなたは次のようなものが必要です./script.sh file1 file2
エラーがある場合
ライン
if [ avem_element "$sir1[i]" "${sir[@]}" -eq 0 ];then
間違った。私が正しく理解したら、avem_element
2つの引数を使って関数を呼び出し、終了コードを比較したいと思います。ただし、[ ]
文字列のみが比較されます。if
終了コード(通常は1 [ ]
)を確認してください。[ ]
まったくそうする必要はありません。これを行う:
if avem_element "$sir1[i]" "${sir[@]}"; then