我已经完成了 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