完成不明确的重定向 >$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检查退出代码(通常是 之一[ ])。你[ ]根本不需要。只需这样做:

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

相关内容