Bash 应为操作数(错误标记为“-”)且重定向不明确

Bash 应为操作数(错误标记为“-”)且重定向不明确,bash,unix,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] curren

我必须执行错误、预期操作数和不明确重定向。 这是我的密码:

#!/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
第8行是:
maxlinetoget=$[$l-$k]
第24行是:
done<$file\u name
我不知道怎么了,请告诉我


谢谢。

这两个错误都是因为
$l
$file\u name
都没有值。当不带引号的变量为空时,Bash有时会产生神秘的错误消息。(如果您使用
$((l-k))
而不是不推荐使用的
$[$l-$k]
,或者引用了您的替换,尤其是
“$file\u name”
,则会收到更合理的错误消息)

stdin
读取一行,并将其放入变量
$line
中。它不产生输出,因此
inputfile
为空。因此,以下所有
cut
命令都不会产生任何输出(无输入,无输出:臭名昭著的尼诺)

你显然想做的是

read file_name i j k l rest
((maxlinetoget = l - k))
# Or maxlinetoget=$((l-k))

文件名
的具体值是多少?我原以为是F1,但表面上它什么都不是……谢谢,但现在我有另一个错误:
/P4.4:line 8:[:missing
]'`3次。第8行是这样的:`if[$currentlinecount-ge$k&&$currentlinecount-le$l]`但我确实这么做了,$[…]就是我所想的,我不知道这个系统是否可以使用新的语法(大约有15年历史)啊。如果((currentlinecount>=k&¤tlinecount@shoham:情况会发生变化,你应该使用
if((currentlinecount>=k&¤tlinecount@shoham):有时你需要自学新技巧。应该很容易判断你使用的bash是否支持(())和$(())“它们已经存在很长时间了。旧式的方法需要更多的引用。@肖汉姆:顺便说一句,你不能在
[…]
内部使用
&&
(你也应该被教导:)。你可以在
(…)
内部使用它。在
[…]
中,你需要使用
-a
read line >| inputfile
read file_name i j k l rest
((maxlinetoget = l - k))
# Or maxlinetoget=$((l-k))