操作数预期(错误标记为" - ")和模糊重定向

时间:2013-12-05 05:54:43

标签: bash unix

我有错误,操作数预期和模糊重定向。 这是我的代码:

#!/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 我不知道出了什么问题,请告诉我。

感谢。

1 个答案:

答案 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))