我有错误,操作数预期和模糊重定向。 这是我的代码:
#!/bin/bash
read input >| inputfile
file_name=$(cut -d" " -f1 inputfile)
i=$(cut -d" " -f2 inputfile)
j=$(cut -d" " -f3 inputfile)
k=$(cut -d" " -f4 inputfile)
l=$(cut -d" " -f5 inputfile)
maxlinetoget=$[$l-$k]
currentlinecount=1
result=0
while read line
do
if [ $currentlinecount -ge $k && $currentlinecount -le $l ]
then
echo -n $line >| linefile
echo -n $line
for number in linefile
do
echo $number
result=$[$result+$number]
done
fi
currentlinecount=$[$currentlinecount+1]
done < $file_name
echo $result
错误:
./P4.4: line 8: -: syntax error: operand expected (error token is "-")
./P4.4: line 24: $file_name: ambiguous redirect
第8行是:maxlinetoget=$[$l-$k]
第24行是:done < $file_name
我不知道出了什么问题,请告诉我。
感谢。
答案 0 :(得分:2)
这两个错误都是$l
而非$file_name
都没有值的结果。当不带引号的变量为空时,Bash有时会产生神秘的错误消息。 (如果您使用$((l-k))
代替已弃用的$[$l-$k]
,或者引用了您的替换,尤其是"$file_name"
,您会收到更明智的错误消息。)
read line >| inputfile
从stdin
读取一行并将其放入变量$line
。它不产生输出,因此inputfile
为空。因此,以下所有cut
命令都不会产生任何输出(无任何内容,没有任何内容:臭名昭着的NINO)。
你显然想做的是
read file_name i j k l rest
((maxlinetoget = l - k))
# Or maxlinetoget=$((l-k))