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